为什么我必须先将外部函数分配给变量,然后才能调用它

Why do I have to assign the external function to a variable before I can invoke it?

本文关键字:然后 变量 调用 分配 函数 外部 为什么      更新时间:2023-09-26

为什么不能按预期工作?

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

就像@theforthey在我刚做时建议的那样

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

当您return internal时,它正在返回一个函数。函数不执行,只是作为引用传递回外部函数的调用方。所以external()基本上计算为一个未执行的函数表达式。它实际上相当于写:

function() {
    alert("external");
}

什么都不会发生,因为函数只是简单地表达,但从不执行。

相反,对于var func = external();,函数表达式被分配给变量func。实际上,它相当于写:

var func = function() {
    alert("external");
}

这就是为什么当您随后执行func()时,会弹出警报。

相关文章: