jsの静的作用領域

1548 ワード

スコープは変数の検索方法を定めています.つまり、コードの変数へのアクセス権限を決定します.
jsは語法の作用域、つまり静的作用域を採用しています.定義段階で決められたのです.実行段階で決めたのではありません.
var value = 1;

function foo() {
    console.log(value);
}

function bar() {
    var value = 2;
    foo();
}

bar();
静的な作用領域なので、barの内部でfooを呼び出すと、foo関数がアクセスできるvalue値はグローバルな作用領域のvalueであるため、最後に1を出力します.つまり、foo関数がアクセスできる変数は定義時に決定されています.fooがいつ呼び出しられますか?どこで呼び出しても大丈夫です.
var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}
checkscope();
ここも、checkscopeでfを実行しました.f関数がアクセスできるscopeは「local scope」です.だから最後に戻ったのも「local scope」です.