1、未声明的变量就赋值, 此变量归全局变量window对象所有
console.log(a); //a is not defined
a=10
console.log(a); //10 等价于 console.log(window.a)
function test(){
var a = b = 123;
}
test();
console.log(b) //123 b未声明就赋值归为window对象所有, 等价于console.log(window.b);
console.log(a) //a is not defined
2、一切声明的变量全是window对象的属性。
var aaa=111;
var bbb=222;
var ccc=333;
//等价于 window{aaa:111,bbb:222,ccc:333}
3、预编译发生在函数执行的前一刻,主要有以下四个步骤:
(1)、创建AO (activation object /执行期上下文)对象;
(2)、找形参和变量声明,将变量和形参名称为AO对象属性名,值为undefined;
(3)、将实参和形参统一;
(4)、在函数体里找到函数声明,值赋予函数体;
function fn(a){
console.log(a); //? a() { }
var a = 123;
console.log(a); //123
function a(){}
console.log(a); //123
var b = function (){}
console.log(b); //? () { }
}
fn(1);