有哪些變數可用?
重要性: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"
。