- 预编译
预编译发生在函数执行的前一刻
1·创建AO (执行器上下文)(函数执行产生的存储空间库)
2·找到形参和变量声明 (找到后作为AO属性名,值为undefined)
3·将实参和形参统一
4·在函数体里面找函数声明
- 作用域链
function test( ) { } test [ [scope] ]
执行期上下文,当函数执行时,会创建一个称为AO的执行期上下文的内部对象。
AO每次执行产生一次,执行完丢弃。
GO全局 预编译
在任意一个函数找变量,其实就是找函数的作用域链
function a() {
}
a defined a.[[scope]] ===> 0 : GO (a定义,a的域为GO)
a doing a.[[scope]] ===> 0 : AO
1 : GO (a执行,a的AO提到作用域链顶端)