返回課程

有哪些變數可用?

重要性: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"