1. 程式人生 > >詞法作用域、動態作用域

詞法作用域、動態作用域

在看《你不知道的JavaScript》的時候更加深入的瞭解了一下js中的作用域,看的是很帶勁兒,但是總害怕記不住,好記性不如爛筆頭嘛,所以我決定稍微寫一些,考慮的不太全面,以後慢慢修改。

需要明確的是:事實上JavaScript並不具有動態作用域,它只有詞法作用域,簡單明瞭,但是this機制某種程度上很像動態作用域。

詞法作用域:是一套引擎如何尋找變數以及會在何處找到變數的規則,它是定義在詞法階段的作用域,是由寫程式碼時將變數和塊作用域寫在哪裡來決定的。

動態作用域:動態作用域並不關心函式和作用域是如何宣告以及在何處宣告的,只關心它們從何處呼叫。類似this的指向問題。 

看一個小題: 

function foo(){
  console.log(a);
}
function bar(){
  var a=3;
  foo();//2
}
var a=2;
bar();

foo是在全域性作用域中定義的,無論在何處呼叫它的作用域都不會發生變化,都是全域性作用域(根據詞法作用域來看)。所以會找響應的全域性中的變數a,若沒找到就會輸出undefined。