为什么这不按预期工作?
function external() {
function internal() {
alert("external");
}
return internal;
}
external(); //nothing happens
var func = external();
func(); // alert pops up
它与事实有关吗,它是一个闭包吗?因为它在这里工作就像我期望的那样:
function test() {
alert("test");
}
test(); //alert pops up without assigning the function to a variable
答案 0 :(得分:0)
external();
仅返回internel函数对象。
我刚刚添加了一个示例,以使其更清晰!
function external() {
alert("foo");
function internal() {
alert("bar");
}
return internal;
}
external(); //returns foo (and the internel function)
external()(); //return foo and then bar
答案 1 :(得分:0)
当你return internal
时,它正在返回一个函数。该函数未执行,仅作为引用传递回外部函数的调用者。所以external()
基本上计算为未执行的函数表达式。它实际上等同于写作:
function() {
alert("external");
}
没有任何反应,因为函数只是表达但从未执行过。
相比之下,对于var func = external();
,函数表达式被赋值给变量func
。实际上,它相当于写作:
var func = function() {
alert("external");
}
这就是为什么当你随后执行func()
时,会弹出警告。