js预编译(发生在js代码执行前一刻 1.语法解析检查 2.预编译 3.执行js代码(0 1))
AO对象:Activation Object
- 创建AO对象
- 形参和变量为AO对象key,值为undefined
- 形参和实参值统一
- 函数声明覆盖(有的话)
GO对象:Global Object
- 创建GO对象
- 找变量声明
- 在函数体中找函数声明
~ 注意:对于函数体的变量,AO对象中有 就用AO对象的,没有就用GO对象的(全局的就是全局的,局部的也是全局的)
以下两个例子:
global = 100;
function fn4() {
console.log(global);
global = 200;
console.log(global);
var global = 300;
}
fn4();
var global;
function fn5() {
console.log(b);
if(a) {
var b = 100;
}
c = 234;
console.log(c);
}
var a;
fn5();
a = 10;
console.log(c);