预编译:
- imply global 暗示全局变量:即任何变量,如果变量未经声明就赋值,此变量就为全局对象所有。 a=10;—>windows.a=10
- 一切声明的全局变量,全是window的属性。(局部变量没有) var b=10;—>windows.b=10
function fn(a){
console.log(a);
var a=123;
console.log(a);
function a(){}
console.log(a);
var b = function(){}
console.log(b);
function d(){}
}
fn(1);
预编译发生在函数执行的前一刻
- 创建AO (Activation Object)(执行期上下文) AO{ }
- 找形参和变量声明,将变量和形参名作为AO属性名,值为undefined AO{ a : undefined,b : undefined}
- 将实参值和形参统一AO{ a :1,b : undefined,}
- 在函数体里面找到函数声明,值赋予函数体 AO{ a : function a ( ) { } ,b : undefined,d : function d ( ) { }
运行结果为 function a ( ) { } , 123 , 123 , function ( ) { }
全局变量为GO GO===window
function test ( ) {
var a=b=123;
}
test();
AO { a : undefined } GO{ b : 123} 当在var 语句下输入console.log(window.b); 结果为 123。当输入console.log(window.a);结果为undefined
为 123。当输入console.log(window.a);结果为undefined
如有不足或错误的地方,欢迎大家反馈