レッスンに戻る

関数は最新の変更を取得しますか?

重要性: 5

関数 sayHi は外部の変数を使用しています。関数実行時、どの値が利用されるでしょう?

let name = "John";

function sayHi() {
  alert("Hi, " + name);
}

name = "Pete";

sayHi(); // 何が表示される?: "John" or "Pete"?

このような状況はブラウザとサーバサイドの開発両方で共通です。例えばユーザ操作やネットワークリクエストなど、関数は作成されたときよりも後に実行するようスケジュールすることができます。

したがって、問題は: 最新の変更を取得しますか?

答えは: Pete です。

関数は “今” の外部変数を取得し、最新の値を利用します。

古い変数の値はどこにも保存されません。関数が変数を必要とするとき、自身、あるいは外部のレキシカル環境から現在の値を取得します。