![](/img/trans.png)
[英]Why cannot assign value inside a function to variable declared outside (globaly)?
[英]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
的結果分配給myFunc
, myFunc
包含函數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.