1. 程式人生 > >js的預編譯、全局變量、局部變量相關知識

js的預編譯、全局變量、局部變量相關知識

所有 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的預編譯、全局變量、局部變量相關知識