全局预编译与函数预编译
预编译
预编译是上下文创建后,js代码执行前的一段时期,在这个时期,会对js代码进行预处理。
全局预编译
全局上下文创建后,会生成变量对象VO
- 首先寻找变量声明,将var声明的变量作为VO对象的属性名,值为undefined。
- 然后寻找函数声明,属性值为函数本身
- 如果函数名与变量名冲突,函数声明会将变量声明覆盖
函数编译
函数上下文创建后,会生成活动变量对象AO
- 寻找变量声明,变量名作为AO对象的属性名,属性值为undefined
- 寻找形参,形参名作为AO对象的属性名,属性值为undefined
- 将实参的值赋予形参,即替换AO对象中形参的属性值
- 寻找函数声明,函数名作为AO对象的属性名,属性值为函数本身
- 如果函数名与变量名冲突,函数声明会将变量声明覆盖