Javascript作用域和變量提升

下面的程序是什麼結果?

var foo = 1;  
function bar() {  
    if (!foo) {  
        var foo = 10;  
    }  
    alert(foo);  
}  
bar();  

結果是10;爲什麼呢,因爲計算機處理這段代碼的順序是這樣的:

function bar(){var foo;if(!foo)(foo = 10;)alert(foo)}var foo;foo = 1;bar();
這裏if(!foo),由於foo未被聲明,所以!foo的值爲true(不信可以alert試一下),所以if裏面的語句會被執行,自然彈出的是10。

那麼javascript中語句執行的順序是什麼規則呢?

  • 1 語言內置:所有的作用域裏都有this和arguments;(譯者注:經過測試arguments在全局作用域是不可見的)
  • 2 形式參數:函數的形式參數會作爲函數體作用域的一部分;
  • 3 函數聲明:像這種形式:function foo(){};
  • 4 變量聲明:像這樣:var foo;
就是按上面的序號依次往下執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章