function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
var myFunc = makeFunc();
myFunc();
即使displayName没有括号,上面的代码仍然有效,即传递对displayName的引用,然后makeFunc()将调用该引用。
现在,如果你做return displayName(); var myFunc = makeFunc;
它也可以按预期工作。但如果你做return displayName; var myFunc = makeFunc;
它就会停止工作。
它应该有效,因为myFunc()会调用这两个函数吗?
答案 0 :(得分:3)
函数引用只是JavaScript中的一个值。函数调用是一个涉及两件事的表达式:对函数的引用和带括号的参数列表。
没有参数列表,对函数的引用只是一个值。
因此,在您的代码中:
function makeFunc() {
var name = "Mozilla";
function displayName() {
alert(name);
}
return displayName;
}
标识符" displayName"在函数中指的是内部函数。 return
语句引用标识符而不是带括号的参数列表。因此,makeFunc()
的返回值是对该内部函数的引用。将其分配给另一个变量会使该变量具有相同的值,因此稍后可以在函数调用表达式中使用它。
请注意,您可以调用makeFunc()
并立即调用返回的函数:
makeFunc()();
这是两个函数调用表达式的序列。第一个是makeFunc()
。返回一个函数引用,因为第二个()
会调用该函数。