レッスンに戻る

どちらの変数が利用可能でしょう?

重要性: 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" になります。