我正在尝试了解闭包,并从MDN遇到了这段代码。我在jsbin中尝试了它并且它可以工作,但我无法弄清楚为什么有必要将makeFunc分配给var myFunc,然后调用myFunc而不是只调用makeFunc,这不起作用。
f
答案 0 :(得分:4)
我无法弄清楚为什么有必要将makeFunc分配给var myFunc
这不是正在发生的事情。看一下代码:
var myFunc = makeFunc();
^^
makeFunc
被称为。它的返回值已分配给myFunc
。
该返回值为displayName
(可以访问已关闭的name
变量)。
myFunc();
然后调用 函数。
答案 1 :(得分:1)
makeFunc
正在返回一个名为displayName
的函数,其中包含" Mozilla"的值。在变量name
中,只能在displayName
函数中访问(尽管它不知道"它最初被称为" displayName"。 ..只是现在只包含该函数的主体以及name
的值。当您将makeFunc
的调用结果分配给myFunc
时,myFunc
包含函数displayName
,包括name
的值。但请注意,displayName
尚未在此时调用/调用。现在,当您调用myFunc
时,会运行displayName
,创建一个显示名称" Mozilla"的警报。
答案 2 :(得分:-1)
我会尝试给出一个非常简短的答案:
makeFunc()
只返回函数而不执行它,因为返回值是函数的名称。
var myFunc = makeFunc();
myFunc();
从上面的代码中,您将我之前提到的功能分配给myFunc
。在下一行,您添加()
,这意味着执行该功能。因此,为什么您会看到alert();
结果。
makeFunc() == displayName
myFunc == makeFunc()
myFunc == displayName
myFunc() == displayName()
答案 3 :(得分:-2)
页面加载关闭允许函数自动运行
为了您的代码 - 您可以像预期的那样将代码重新调整为此,而无需将其分配给变量myFunc
HttpPost