1. 程式人生 > >javascript的變數宣告和函式宣告提升

javascript的變數宣告和函式宣告提升

*參考《你不知道的Javascript(上)》第一部分第四章——提升

要理解javascript的變數宣告和函式宣告的提升,重要的是理解瀏覽器引擎對javascript程式碼的處理過程:包括變數和函式在內的所有宣告都會在任何程式碼被執行前首先被處理。如:

var a=2;
var b=5;

其處理過程是,先進行變數宣告

  var a;
  var b;

再進行變數賦值

  a=2;
  b=5;

1.變數宣告提升

例子1:

function test(){
    a=2;
    var a;
    console.log(a);   //2
}

其處理過程是:

function test(){
    var a;
    a=2;
    console.log(a); 
}

例子2:

function test(){
    console.log(a);     //undefined
    var a=2;
}

其處理過程是:

function test(){
    var a;
    console.log(a);   
    a=2;
}

2.函式宣告提升

例子1:

函式宣告的提升優先順序大於變數宣告的提升

foo();    //1
var foo;
function foo(){
    console.log(1
); } foo=function(){ console.log(2); }

其處理過程:

function foo(){
    console.log(1);
}
var foo;  //並不執行,重複的宣告
foo();    
foo=function(){
    console.log(2);
}

例子2:

函式表示式不會被提升

foo();             //TypeError
bar();            //ReferenceError
var foo=function bar(){
    //……
}

其處理過程是

var foo;
foo();
bar();
foo=function
bar(){
//…… };