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