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有时很难理解;)