javascript 詞法作用域

_冰點發表於2019-02-02
function foo() {
    console.log(a);
}

function bar() {
    var a = 3;
    foo();
}

var a = 2;
bar();

控制檯輸出:2
複製程式碼

明明foo函式是在bar函式中執行的,而bar函式作用域中也宣告瞭變數a,那為什麼foo不會列印距離更近作用域的值為3的a呢? 因為javascript的作用域實現是基於詞法作用域的,而詞法作用域的定義發生 在程式碼的書寫階段。 也就是說在程式碼中foo的a是通過RHS查詢從全域性作用域中引用的,因此執行時也會繼續從全域性中引用a變數,而全域性作用域中的a = 2,因此控制檯輸出2。

相關文章