JS筆記--1.做用域

理解做用域


引擎:負責JavaScript程序的編譯及執行過程函數

編譯器:負責語法分析及代碼生成code

做用域:負責收集並維護全部聲明的標識符ip

做用域的嵌套:一個塊或者函數嵌套在另外一個塊級做用域中時,就發生了塊級做用域的嵌套。所以在當前做用域中沒法找到某個變量時,引擎就會在外層的做用域查找,直到找到該變量或者抵達最外層做用域(全局做用域)爲止。作用域

var value=1;
function bar1(){
    var value=2;
    function foo1(){
        console.log(value);
    }
    foo1();
}
bar1();//2

詞法做用域:一個變量和函數的詞法做用域取決於該變量或函數聲明的地方,寫在哪詞法做用域就在該塊做用域。編譯器

var value=1;
function foo2(){
    console.log(value);
}

function bar2(){
    let value=2;
    foo2();
}

bar2();//1

爲何二者的結果不一樣呢?
這是由於JS採用的是詞法做用域,及變量或函數的做用域是由聲明時位置決定的。對於foo1,它的做用域是bar1因此結果爲2,對於foo2,它在聲明時做用域是在window中,因此查找時foo2內部沒有value,向外查找window中valueio

相關文章
相關標籤/搜索