以下是Mozilla关于javascript闭包的代码示例:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
为什么将内部函数displayName()
作为变量displayName
返回,即没有括号?
答案 0 :(得分:2)
如果return displayName;
有括号,那么它会调用`makeFunc'中的函数displayName作为返回函数本身。
答案 1 :(得分:2)
return displayName()
会
var myFunc
已设置且undefined
。 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()
,而不是返回对函数本身的引用,它将调用该函数并返回函数返回的任何内容。