这是 Mozilla 关于 javascript 闭包的代码示例:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
为什么将内部函数displayName()
作为变量返回displayName
,即不带括号?
这是 Mozilla 关于 javascript 闭包的代码示例:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
为什么将内部函数displayName()
作为变量返回displayName
,即不带括号?
如果return displayName;
有括号,那么它将在“makeFunc”中调用函数displayName,与返回函数本身相反。
return displayName()
将
var myFunc
被设置并且undefined
。return displayName
(不带括号)返回函数本身,而前者(带括号)调用函数并返回函数本身返回的任何内容。由于function displayName
没有明确的 return 语句,因此隐含的返回类型是undefined
.
在该代码示例中,makeFunc
正在调用(它有括号)并将其返回值分配给myFunc
.
在该函数内部,return displayName
是指该函数并返回它。
最终结果是myFunc
一个具有预定义范围(where name="Mozilla"
)的函数,以后可以调用。
在 JavaScript 中,所有函数都是对象(类型为Function
)。创建函数时,您正在创建一个新Function
对象并将其分配给一个变量。在您的情况下,您将函数保存到变量displayName
. 如果你想返回它,你放return [variableName]
,就像任何其他对象一样。
当您将()
存储Function
对象的变量名称放在后面时,您正在调用该函数。这很像做displayName.call(this)
。它不完全相同,因为有一些重要的差异,但它是相同的概念。
因此,如果您 put return displayName()
,而不是返回对函数本身的引用,它将调用该函数并返回该函数返回的任何内容。