簡體   English   中英

為什么要為JavaScript中的變量分配聲明的函數?

[英]Why assign a declared function to a variable in javascript?

我正在嘗試了解閉包,並從MDN遇到了這段代碼。 我在jsbin中進行了嘗試,並且可以正常工作,但是我無法弄清楚為什么必須將makeFunc分配給var myFunc然后再調用myFunc而不是僅僅調用makeFunc,這是行不通的。

function makeFunc() {
    var name = "Mozilla";
    function displayName() {
        alert(name);
    }
    return displayName;
}
var myFunc = makeFunc();
myFunc();

我不知道為什么需要將makeFunc分配給var myFunc

那不是正在發生的事情。 看一下代碼:

var myFunc = makeFunc();
                     ^^

makeFunc調用 它的返回值分配給myFunc

該返回值是displayName (可以訪問封閉的name變量)。

myFunc(); 然后調用函數。

makeFunc返回一個名為displayName的函數,該函數在變量name包含“ Mozilla”的值,該值只能在displayName函數中訪問(盡管它不“知道”它最初被稱為“ displayName” ...只是簡單的現在包含該函數的主體以及name的值)。 將調用makeFunc的結果分配給myFuncmyFunc包含函數displayName ,包括name的值。 但是請注意,此時尚未調用displayName 現在,當您調用myFunc ,將運行displayName ,創建一個顯示名稱“ Mozilla”的警報。

頁面加載關閉允許功能自動運行

對於您的代碼-您可以按預期將其重新調整為該代碼,而無需將其分配給變量myFunc

(function makeFunc() {
    var name = "Mozilla";
    function displayName() {
        alert(name);
    }
    return displayName;
})();

我將嘗試給出一個簡短的答案:

makeFunc()僅返回函數而不執行它,因為返回值是函數的名稱。

var myFunc = makeFunc();
myFunc();

在上面的代碼中,您正在將我先前提到的功能分配給myFunc 在下一行添加() ,表示執行該函數。 因此,為什么要看到alert(); 結果。


插圖

makeFunc() == displayName
myFunc == makeFunc()
myFunc == displayName
myFunc() == displayName()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM