1. imply global 暗示全局变量:任何变量,未经声明就赋值,此变量为全局对象(window)所有
例:
a = 10; --> window.a = 10; (不管此变量是在全局赋值的,还是局部赋值的)
2. 一切声明的全局变量都是window的属性 --> window即全局的
var b = 123; --> window.b = 123;
--> window {
b: 123 //在全局对象中新加了一个属性
}
预编译发生在函数执行的前一刻
--> 解释一句,执行一句
函数体预编译过程: 1. 创建AO对象(Activation Object)--> 生成执行期上下文 2. 找形参和变量声明,将形参和变量声明作为AO对象的属性名,值为undefined 3. 将实参和形参值统一 4. 在函数体里找函数声明,作为GO对象的属性名,值为函数体 --> 注意:函数表达式 ≠函数声明
全局预编译过程: 1. 生成GO对象(Global Object)=== window 2. 找变量声明,作为GO对象的属性名,值为undefined 3. 找函数声明,作为GO对象的属性名,值为函数体