詞法作用域和動態作用域

看風景就發表於2017-05-26

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

相關文章