JavaScript採用的是詞法作用域
1.詞法作用域
即函式定義時,即確定的作用域。js中的作用域鏈,在函式宣告時候,就已經確定了,無論函式在何處呼叫,其作用域變數的查詢都是按照定義是包含關係去查詢。
2.動態作用域
變數的作用域與函式的呼叫地點有關,在不同的函式中呼叫,變數的查詢會沿著呼叫函式向上查詢。
舉例:
var a = 2; function foo() { console.log( a ); } function bar() { var a = 3; foo(); } bar();
1.在詞法作用域,a的值會先在foo中查詢,沒有的話到全域性中查詢,a=2
2.在動態作用域中,a的值先在foo中查詢,沒有的話到其呼叫函式中查詢,即bar中查詢,a = 3