0

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

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

var myFunc = makeFunc();
myFunc();

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

4

4 回答 4

2

如果return displayName;有括号,那么它将在“makeFunc”中调用函数displayName,与返回函数本身相反。

于 2013-08-15T23:03:23.453 回答
2

return displayName()

  1. 调用该行的警报var myFunc被设置并且
  2. 返回undefined

return displayName(不带括号)返回函数本身,而前者(带括号)调用函数并返回函数本身返回的任何内容。由于function displayName没有明确的 return 语句,因此隐含的返回类型是undefined.

于 2013-08-15T23:04:49.370 回答
0

在该代码示例中,makeFunc正在调用(它有括号)并将其返回值分配给myFunc.

在该函数内部,return displayName该函数并返回它。

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

于 2013-08-15T23:02:09.690 回答
0

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

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

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

于 2013-08-15T23:48:41.280 回答