最近我看到了这段JavaScript代码,但却无法理解它的目的是什么。
var f = function(a) {
return function() {
alert(a());
};
};
f(function() { return "Hello World"; })();
请解释一下这完成了什么!
答案 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");
但是有两个额外的元素使它更复杂:
但由于这些好处都没有在代码片段中实际使用,我可以理解为什么你会感到困惑。
答案 2 :(得分:3)
获取警告框以显示“Hello world”是一种非常复杂的方法。函数是javascript中的第一类项,可以作为参数传递给其他函数。
答案 3 :(得分:2)
此代码创建一个函数生成器。第一个函数(其引用存储在f
中)接受对另一个函数(a
)的引用。然后f
创建一个关闭参数a
的函数,并返回对新函数的引用,该函数将警告a's
调用结果的返回值。
最后,使用内联函数调用此混乱,并立即调用其结果(结尾处的尾部打开和关闭括号)。
答案 4 :(得分:0)
f
被赋予一个函数,该函数将函数作为其参数,调用它,并在alert
中显示其返回值。然后使用函数调用f
,该函数在调用时返回字符串"Hello World"
,从而导致Hello World
显示在警报中。