"return function(){...}"在JavaScript中有什么作用?

Rak*_*yal 8 javascript function

最近我看到了这段JavaScript代码,但一直无法理解它想要做什么.

var f = function(a) {
    return function() {
        alert(a());
    };
};
f(function() { return "Hello World"; })(); 
Run Code Online (Sandbox Code Playgroud)

请解释一下这完成了什么!

mox*_*oxn 9

它执行f返回的函数.
f返回一个调用警报的函数,该警报显示您作为f参数提供的函数的输出.

编辑: 只需替换一些部分,使眼睛更容易,你会看到自己:

var f = function(a) {
    var output = a();
    var alertCaller = function() {
        alert(output);
    };
    return alertCaller;
};

var helloWorld = function() { return "Hello World"; }
var result = f(helloWorld); //f takes a function as argument
result(); //result must be a function
Run Code Online (Sandbox Code Playgroud)


And*_*yle 6

它只是一个更高级别的功能,在这种情况下并不是必需的.

f是一个函数,它接受另一个函数(被调用a),并返回一个新生成的函数,该函数将评估a并弹出一个显示结果的警告框.

所以底线调用f(传入一个打印"Hello World"的匿名函数),然后立即调用返回的匿名函数f- 这将评估传入的参数(你可以看到返回"Hello World")然后弹出警报框.

发布的代码在功能上等同于

alert("Hello World");
Run Code Online (Sandbox Code Playgroud)

但是有两个额外的元素使它更复杂:

  1. 您可以传入一个任意函数,以生成出现在警告框中的字符串(这将被懒惰地评估,这可能很重要 - 例如,当警报是打印当前时间/应用程序状态/内存使用的函数显示而不是创建方法时).
  2. 您可以生成一个闭包,它将显示此警报,然后传递它,而不是立即执行警报.

但由于这些好处都没有在代码片段中实际使用,我可以看出为什么你会感到困惑.