前端语言-JavaScript
2022-05-11 00:12:17 15 举报
AI智能生成
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
数据存储在内存中
内存模型
以一个js文件为例
以一个js文件为例
代码空间
存放可执行代码
栈空间,调用栈
call stack
call stack
存放执行上下文(压栈)
创建时期
编译时
分类
全局上下文
函数上下文
eval
存放原始类型
变量环境
存放var定义的变量
内容
变量名
变量值
词法环境
存放let、const定义的变量
管理函数的调用
特点:不建议占用大空间,不然影响上下文切换效率、回收效率和整体执行效率
堆空间
heap
heap
存放引用类型
内容
地址
值
特点:空间很大,存放很大数据
缺点:分配内存和回收内存占用一定时间
为什么这么分
JavaScript引擎需要用栈来维护程序执行期间上下文的状态
数据都存在栈空间中,栈空间就会太大,影响上下文切换效率,影响整个程序的执行效率
闭包
正常情况是调用栈中的函数执行结束后,函数的执行上下文就会销毁,上下文中的变量也一同销毁。
子主题
如何产生
编译时,JavaScript引擎对内部函数进行词法扫描,发现引用了外部(可以是函数)的变量,引擎就判断这是一个闭包,会在堆空间创建一个 clourse(外部函数名) 对象(是一个内部对象,JavaScript无法访问),用来保存引用的外部函数的变量。
产生过程
栈空间,调用栈
call stack
call stack
变量环境
变量名
clourse(外部函数名)
变量值
堆空间
heap
heap
地址
值
闭包变量
核心条件
预扫描内部函数
内部函数引用的外部变量保存到堆空间中
进阶
内存机制
ES6
正则表达式
0 条评论
下一页