预编译/作用域链

136 阅读1分钟

  • 预编译

预编译发生在函数执行的前一刻

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提到作用域链顶端)