Javascript函数作为变量?

时间:2013-08-15 22:59:28

标签: javascript

以下是Mozilla关于javascript闭包的代码示例:

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

var myFunc = makeFunc();
myFunc();

为什么将内部函数displayName()作为变量displayName返回,即没有括号?

4 个答案:

答案 0 :(得分:2)

如果return displayName;有括号,那么它会调用`makeFunc'中的函数displayName作为返回函数本身。

答案 1 :(得分:2)

return displayName()

  1. var myFunc已设置且
  2. 的行调用警报
  3. return undefined
  4. return displayName(没有括号)返回函数本身,而前者(带括号)调用函数并返回函数本身返回的任何内容。由于function displayName没有显式的return语句,因此隐含的返回类型为undefined

答案 2 :(得分:0)

在该代码示例中,makeFunc称为(它有括号),其返回值已分配给myFunc

在该函数中,return displayName 引用到该函数并将其返回。

最终结果是myFunc是具有预定义范围的函数(其中name="Mozilla"),以后可以调用。

答案 3 :(得分:0)

在JavaScript中,所有函数都是对象(类型为Function)。创建函数时,您将创建一个新的Function对象并将其分配给变量。在您的情况下,您将函数保存到变量displayName。如果你想要返回它,你可以放置return [variableName],就像任何其他对象一样。

当您将()放在存储Function对象的变量名称后面时,您正在调用该函数。这很像做displayName.call(this)。它并不完全相同,因为存在一些重要的差异,但这是相同的概念。

因此,如果您放置return displayName(),而不是返回对函数本身的引用,它将调用该函数并返回函数返回的任何内容。