1. 栈内存和堆内存
- 栈内存
连续的存储空间,类似数据结构中的栈,用于存放数值,字符,内存地址等小数据。
基本类型数据的值被保存在栈内存中。
Number,String,Boolean,Null,Undefined
- 堆内存
散列的存储空间,类似于数据结构中的链表,存放动态变化的大数据。
引用类型的值被保存在堆内存中,栈内存中仅保存堆内存的地址。
Object,Array,Function
2. 变量作用域
- 全局变量
- 局部变量
当函数在执行时,会创建一个封闭的执行期上下文环境,函数内部声明的变量仅可在函数内部使用,外部无法访问,而全局变量则在任何地方都可以使用
3. JS预编译
- 语法分析
通篇扫描js文件,检查是否有低级语法错误
- 预编译4部曲
未进入执行阶段,变量对象VO(variable object)都不能访问,进入执行阶段后,变量对象VO转变为了活动对象AO(active object),里面的属性都能被访问了,然后开始执行阶段的操作。
Index | Content |
---|---|
第一步 | 创建AO对象(执行期上下文对象,全局为GO) |
第二步 | 将形参和变量声明作为AO对象的属性名,值为Undefined |
第三步 | 将实参值传递给形参,即赋值给AO对象对应属性名 |
第四步 | 将函数声明为AO对象的方法名,值为函数体 |
- 解释执行:解释一行,执行一行。
function test(a){
var b=1; function c(){}
}
test(2);
// 函数预编译四部曲(函数执行前一刻,不执行不会预编译),全局预编译同理
1---testAO
{}
2---testAO
{a:undefined,b:undefined}
3---testAO
{a:2,b:undefined}
4---testAO
{a:2,b:1,c:function(){}}
网友评论