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" になります。