javascript靜態做用域和動態做用域

靜態做用域指的是一段代碼,在它執行以前就已經肯定了它的做用域,簡單來講就是在執行以前就肯定了它能夠應用哪些地方的做用域(變量)。
動態做用域–函數的做用域是在函數調用的時候才決定的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。函數

相關文章
相關標籤/搜索