Javascript 为什么在调用外部函数之前必须将其赋值给变量?
为什么这不能像预期的那样工作Javascript 为什么在调用外部函数之前必须将其赋值给变量?,javascript,function,closures,Javascript,Function,Closures,为什么这不能像预期的那样工作 function external() { function internal() { alert("external"); } return internal; } external(); //nothing happens var func = external(); func(); // alert pops up 这是否与事实有关,这是一个终结?因为在这里,它的工作原理与我预期的一样: function t
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
就像我刚做的时候你建议的那样
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
当您
返回内部时
,它将返回一个函数。函数不会执行,只是作为引用传递回外部函数的调用方。因此external()
的计算结果基本上是一个未执行的函数表达式。它实际上相当于书写:
function() {
alert("external");
}
var func = function() {
alert("external");
}
什么也不会发生,因为函数只是简单地表示出来,但从未执行过
相反,对于var func=external()
,函数表达式被分配给变量func
。实际上,它相当于书写:
function() {
alert("external");
}
var func = function() {
alert("external");
}
这就是为什么随后执行
func()
时会弹出警报。执行external()
您正在获取internel
函数对象,您需要显式地调用它,可能是这样的external()代码>是!我成功了!我在一本javascript书中找到了这个例子,我想知道为什么他们会首先分配它。。。JS有时很难理解;)