返回課程

函式會擷取最新變更嗎?

重要性:5

函式 sayHi 使用外部變數 name。當函式執行時,它會使用哪個值?

let name = "John";

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

name = "Pete";

sayHi(); // what will it show: "John" or "Pete"?

這種情況在瀏覽器和伺服器端開發中都很常見。函式可能會排程在建立之後執行,例如在使用者動作或網路要求之後。

因此,問題是:它會擷取最新變更嗎?

答案是:Pete

函數會取得目前的外層變數,它會使用最近的值。

舊的變數值不會儲存在任何地方。當函數需要一個變數時,它會從自己的詞彙環境或外層環境取得目前的值。