JS运行三部曲
预编译前奏
imply global
暗示全局变量:即任何变量,如果变量未经声明的变量直接赋值,此变量就为全局变量,归window对象所有
a = 10;
----> window.a = 10;
var a = 123;
----> window.a = 123;
function test() {
var a = b = 123;
}
test();
console.log(window.a);
console.log(window.b);
预编译过程
- 预编译过程
- 创建 GO(Gobal Object)对象(全局上下文)
- 找变量声明,将变量作为 GO 属性名,值为 undefined
- 在全局找函数声明,值赋予函数体
- 执行函数的前一刻,生成 AO(Activation Object)对象(执行期上下文)
- 找形参和变量声明,将变量和形参名作为 AO 属性名,值为 undefined
- 将实参值和形参统一
- 在函数体里面找函数声明,值赋予函数体
global = 100;
function fn() {
console.log(global);
global = 200;
console.log(global);
var global = 300;
}
fn();
var global;
- GO 就是 window
- JS 不建议在 if 里边声明函数
- 只有typeof(XXX)不会报错,返回值是字符串类型
- typeof(null)的结果为object