事實上JavaScript並不具有動態作用域,它只有詞法作用域,簡單明了,但是this機制某種程度上很像動態作用域
詞法作用域:是一套引擎如何尋找變量以及會在何處找到變量的規則,它是定義在詞法階段的作用域,是由寫代碼時將變量和塊作用域寫在哪里來決定的。
動態作用域:動態作用域並不關心函數和作用域是如何聲明以及在何處聲明的,只關心它們從何處調用。類似this的指向問題
例子
function foo(){
console.log(a);
}
function bar(){
var a=3;
foo();//2
}
var a=2;
bar();
foo是在全局作用域中定義的,無論在何處調用它的作用域都不會發生變化,都是全局作用域(根據詞法作用域來看)。所以會找響應的全局中的變量a,若沒找到就會輸出undefined。
參考書籍:
《你不知道的js》