靜態做用域指的是一段代碼,在它執行以前就已經肯定了它的做用域,簡單來講就是在執行以前就肯定了它能夠應用哪些地方的做用域(變量)。
動態做用域–函數的做用域是在函數調用的時候才決定的javascript
JavaScript採用的是詞法做用域即靜態做用域;
// 靜態做用域: var a = 10; function fn() { var b = 1; console.log(a + b); } fn(); // 11
在建立fn函數時的時候就已經肯定了它能夠做用哪些變量,若是函數fn裏面有變量a就直接操做變量a,
若是沒有就往上一級查找,這就是靜態做用域java
// 動態做用域: function foo() { console.log(a); } function bar() { var a = 3; foo(); } var a = 2; bar(); // 2;
bar 調用,bar裏面foo被調用,foo函數須要查找變量a,因爲JavaScript是詞法做用域(即靜態做用域),foo被解析時在全局做用域.
因此只能在全局做用域中找a,輸出結果爲2,而非bar做用域中的a。若是js採用的時動態做用域,那麼foo在bar中調用,就會先在bar中查詢a,輸出爲3。函數