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

时间:2009-10-19 14:12:41

标签: javascript function

最近我看到了这段JavaScript代码,但却无法理解它的目的是什么。

var f = function(a) {
    return function() {
        alert(a());
    };
};
f(function() { return "Hello World"; })(); 

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

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

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

f是一个函数,它接受另一个函数(称为a),返回一个新生成的函数,它将评估a并弹出警报显示结果的框。

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

发布的代码功能等同于

alert("Hello World");

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

  1. 您可以传入任意函数以生成警告框中显示的字符串(这将被延迟评估,这可能很重要 - 例如打印当前时间的函数/ app status / memory在显示警报时使用,而不是在创建方法时使用。
  2. 您可以生成一个闭包,显示此警报,然后传递它,而不是立即执行警报。
  3. 但由于这些好处都没有在代码片段中实际使用,我可以理解为什么你会感到困惑。

答案 2 :(得分:3)

获取警告框以显示“Hello world”是一种非常复杂的方法。函数是javascript中的第一类项,可以作为参数传递给其他函数。

答案 3 :(得分:2)

此代码创建一个函数生成器。第一个函数(其引用存储在f中)接受对另一个函数(a)的引用。然后f创建一个关闭参数a的函数,并返回对新函数的引用,该函数将警告a's调用结果的返回值。

最后,使用内联函数调用此混乱,并立即调用其结果(结尾处的尾部打开和关闭括号)。

答案 4 :(得分:0)

f被赋予一个函数,该函数将函数作为其参数,调用它,并在alert中显示其返回值。然后使用函数调用f,该函数在调用时返回字符串"Hello World",从而导致Hello World显示在警报中。