js执行相关概念

1. 栈内存和堆内存

  • 栈内存

连续的存储空间,类似数据结构中的栈,用于存放数值,字符,内存地址等小数据。

基本类型数据的值被保存在栈内存中。

Number,String,Boolean,Null,Undefined
  • 堆内存

散列的存储空间,类似于数据结构中的链表,存放动态变化的大数据。

引用类型的值被保存在堆内存中,栈内存中仅保存堆内存的地址。

Object,Array,Function

2. 变量作用域

  • 全局变量
  • 局部变量

当函数在执行时,会创建一个封闭的执行期上下文环境,函数内部声明的变量仅可在函数内部使用,外部无法访问,而全局变量则在任何地方都可以使用

3. JS预编译

  1. 语法分析

通篇扫描js文件,检查是否有低级语法错误

  1. 预编译4部曲

未进入执行阶段,变量对象VO(variable object)都不能访问,进入执行阶段后,变量对象VO转变为了活动对象AO(active object),里面的属性都能被访问了,然后开始执行阶段的操作。

Index Content
第一步 创建AO对象(执行期上下文对象,全局为GO)
第二步 将形参和变量声明作为AO对象的属性名,值为Undefined
第三步 将实参值传递给形参,即赋值给AO对象对应属性名
第四步 将函数声明为AO对象的方法名,值为函数体
  1. 解释执行:解释一行,执行一行。
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(){}} 

你可能感兴趣的:(js执行相关概念)