最近我看到了这段JavaScript代码,但一直无法理解它想做什么。
var f = function(a) {
return function() {
alert(a());
};
};
f(function() { return "Hello World"; })();
请解释这个的作用!
最近我看到了这段JavaScript代码,但一直无法理解它想做什么。
var f = function(a) {
return function() {
alert(a());
};
};
f(function() { return "Hello World"; })();
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
这只是一个更高级别的函数,在这种情况下并不是真正必要的。
f
是一个接受另一个函数(称为 a
)的函数,并返回一个新生成的函数,该函数将评估 a
并弹出一个显示结果的警报框。
因此,底部调用 f(传入打印“Hello World”的匿名函数),然后立即评估由 f
返回的匿名函数 - 该函数将评估传递的参数(您可以看到返回“Hello World”),然后弹出一个警报框。
发布的代码在功能上等同于
alert("Hello World");
但是还有两个额外的元素使其更加复杂:
但由于代码片段中实际上没有使用这些好处,所以我可以理解为什么您会感到困惑。
要在弹出框中显示“Hello world”,需要使用一种非常复杂的方法。在JavaScript中,函数是一等公民,可以作为参数传递给其他函数,也可以从其他函数中返回。
f
中)接受对另一个函数(a
)的引用。然后,f
创建一个闭合于参数a
的函数,并返回对新函数的引用,该函数将警报a
调用结果的返回值。f
被赋予一个函数,该函数以另一个函数作为其参数,调用它,并在 alert
中显示其返回值。然后,f
被调用,传入一个函数作为参数,当该函数被调用时返回字符串 "Hello World"
,结果在警告框中显示 Hello World
。
f()()
),看起来确实令人困惑,直到你“懂了”。 - Andrzej Doyle