どちらの変数が利用可能でしょう?
重要性: 5
以下の関数 makeWorker
は別の関数を作りそれを返します。その新しい関数はどこからでも呼ぶことが可能です。
これは作成された場所から外部の変数へアクセスするでしょうか?それとも実行された場所から?あるいはその両方?
function makeWorker() {
let name = "Pete";
return function() {
alert(name);
};
}
let name = "John";
// 関数を作成
let work = makeWorker();
// 呼び出し
work(); // 何が表示されるでしょう?
“Pete” or “John” どちらの値が表示されるでしょう?
答えは: Pete です。
以下のコードの work()
関数は、外部のレキシカル環境参照を介して、元の場所から name
を取得します。:
したがって、結果は "Pete"
になります。
しかし、makeWorker()
に let name
が無かった場合は、検索は外部に向かい、上のチェーンの通りグローバル変数を取ります。この場合、結果は "John"
になります。