js的預編譯、全局變量、局部變量相關知識
阿新 • • 發佈:2018-03-25
所有 func var 等價 局部變量 () 全局 log not
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);
js的預編譯、全局變量、局部變量相關知識