どの変数が利用できますか?
重要度: 5
下記の関数makeWorker
は別の関数を作成して返します。その新しい関数は他の場所から呼び出すことができます。
これは、作成場所、呼び出し場所、またはその両方の外部変数にアクセスできますか?
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// create a function
let work = makeWorker();
// call it
work(); // what will it show?
結果は「Pete」または「John」のどちらになりますか?
正解はPeteです。
下記のコードでwork()
関数は、外部字句環境の参照を使用して、その起源からname
を取得します。
したがって、結果はここで"Pete"
です。
ただし、makeWorker()
にlet name
がない場合は、上で説明したように探索は外部に行われ、グローバル変数が取得されます。その場合は、結果は"John"
となります。