関数は最新の変更を取得しますか?
重要性: 5
関数 sayHi は外部の変数を使用しています。関数実行時、どの値が利用されるでしょう?
let name = "John";
function sayHi() {
alert("Hi, " + name);
}
name = "Pete";
sayHi(); // 何が表示される?: "John" or "Pete"?
このような状況はブラウザとサーバサイドの開発両方で共通です。例えばユーザ操作やネットワークリクエストなど、関数は作成されたときよりも後に実行するようスケジュールすることができます。
したがって、問題は: 最新の変更を取得しますか?
答えは: Pete です。
関数は “今” の外部変数を取得し、最新の値を利用します。
古い変数の値はどこにも保存されません。関数が変数を必要とするとき、自身、あるいは外部のレキシカル環境から現在の値を取得します。