这是 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(),而不是返回对函数本身的引用,它将调用该函数并返回该函数返回的任何内容。