レッスンに戻る

どの変数が利用できますか?

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