理解函数的执行过程
函数的执行过程分成两阶段,第一阶段是创建执行上下文环境阶段,第二阶段是代码执行阶段
创建执行上下文阶段(发生在 函数被调用时 && 函数体内的代码执行前 )。
1.创建变量对象,这个过程会:创建 arguments 对象,初始化函数参数变量 ---> 检查创建当前上下文环境中的function函数声明(即所谓的函数声明提升) ---> 检查创建当前上下文环境中的var变量声明(即所谓变量提升)、let const声明;
2.建立作用域链,确定在当前上下文环境寻找变量的规则;
3.确定this对象的指向;
代码执行阶段:
4.执行函数体内的代码,这个阶段会完成变量赋值,函数引用,以及执行其他代码。
在未进入执行阶段之前,变量对象中的属性还在创建都不能访问。但是进入执行阶段之后,变量对象创建完成转变为了活动对象,里面的属性都能被访问了,然后才开始进行执行阶段的操作。也就是说,变量对象和活动对象的唯一区别就是处于执行上下文的不同生命周期。
变量对象更详细介绍参考此文