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。