为什么在javascript中将声明的函数赋值给变量?

时间:2017-06-21 16:42:05

标签: javascript function variables closures

我正在尝试了解闭包,并从MDN遇到了这段代码。我在jsbin中尝试了它并且它可以工作,但我无法弄清楚为什么有必要将makeFunc分配给var myFunc,然后调用myFunc而不是只调用makeFunc,这不起作用。

f

4 个答案:

答案 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