函式會擷取最新變更嗎?
重要性:5
函式 sayHi 使用外部變數 name。當函式執行時,它會使用哪個值?
let name = "John";
function sayHi() {
alert("Hi, " + name);
}
name = "Pete";
sayHi(); // what will it show: "John" or "Pete"?
這種情況在瀏覽器和伺服器端開發中都很常見。函式可能會排程在建立之後執行,例如在使用者動作或網路要求之後。
因此,問題是:它會擷取最新變更嗎?
答案是:Pete。
函數會取得目前的外層變數,它會使用最近的值。
舊的變數值不會儲存在任何地方。當函數需要一個變數時,它會從自己的詞彙環境或外層環境取得目前的值。