前端语言-JavaScript
2022-05-11 00:12:17 15 举报
AI智能生成
JavaScript
作者其他创作
大纲/内容
全栈开发
JavaScript
Java、C#、C、C++、TypeScripts
静态语言:使用前就要确认变量数据类型的语言
Python、Ruby、Perl、PHP、VB、JavaScript
动态语言:运行过程中才检查变量数据类型的语言 可以保存不同类型的值
隐式类型转换:偷偷转换的变量类型的行为
JavaScript、VB、PHP、Perl、C、C++、TypeScript
弱类型语言:支持隐式类型转换的语言 即引擎运行时自己计算
Java、C#、Ruby、Python
强类型语言:不支持隐式类型转换的语言
语言类型
在内存中数据存放的位置不一样
如何区分
String
Number
Boolean
Undefined
Null
BigInt
Symbol
原始类型
Object
引用类型
数据类型
存放可执行代码
代码空间
编译时
创建时期
全局上下文
函数上下文
eval
分类
存放var定义的变量
变量名
变量值
内容
变量环境
存放let、const定义的变量
词法环境
存放原始类型
存放执行上下文(压栈)
管理函数的调用
特点:不建议占用大空间,不然影响上下文切换效率、回收效率和整体执行效率
栈空间,调用栈call stack
地址
值
存放引用类型
特点:空间很大,存放很大数据
缺点:分配内存和回收内存占用一定时间
堆空间heap
JavaScript引擎需要用栈来维护程序执行期间上下文的状态
数据都存在栈空间中,栈空间就会太大,影响上下文切换效率,影响整个程序的执行效率
为什么这么分
内存模型以一个js文件为例
数据存储在内存中
子主题
正常情况是调用栈中的函数执行结束后,函数的执行上下文就会销毁,上下文中的变量也一同销毁。
编译时,JavaScript引擎对内部函数进行词法扫描,发现引用了外部(可以是函数)的变量,引擎就判断这是一个闭包,会在堆空间创建一个 clourse(外部函数名) 对象(是一个内部对象,JavaScript无法访问),用来保存引用的外部函数的变量。
如何产生
clourse(外部函数名)
闭包变量
产生过程
预扫描内部函数
内部函数引用的外部变量保存到堆空间中
核心条件
闭包
基础
内存机制
进阶
ES6
正则表达式
0 条评论
回复 删除
下一页