0

我一直在寻找关于 JavaScript 的鲜为人知的事实,我遇到了这篇文章,任何人都可以解释为什么下面的代码

function (x) { return foo(x); }

可以用

foo

试图用我对 JavaScript 的一点了解来解决这个问题,但我没有找到原因。谁能解释一下?

4

4 回答 4

2

因为

var bar1 = function (x) { return foo(x); };
var bar2 = foo;

进而

bar1(5);
bar2(5);

第一个将执行将调用的函数,foo(5)第二个将foo(5)直接调用。相同的最终结果。

于 2013-09-10T08:18:28.960 回答
1

第一个是一个函数,它接受一个参数并返回该foo参数的任何结果。第二个是一个函数,它接受一个参数(大概)并返回该参数的任何结果(foo因为它foo函数)。

长版本只是一个foo不添加任何东西的包装器。

于 2013-09-10T08:16:53.443 回答
1

function(x){return foo(x);}实际上是一个无名函数,它将 x 传递给函数 foo。无名函数将在行上返回 foo(x) 的结果,这与在第一个地方return foo(x) 调用foo(x)而不是在另一个函数中形成相同。

于 2013-09-10T08:17:51.400 回答
1

此代码片段假定它foo已经是当前范围内的函数。

当你想foo作为回调传递时,你可以直接这样做:

function ITakeACallback(callback) {
    callback(42); // and call it
}

ITakeACallback(foo);

所以你在这里所做的是传递给ITakeACallback一个恰好是可调用函数的参数;ITakeACallback确实如此。

当然,我们可以传递任何可调用函数:

ITakeACallback(function(x) { return foo(x); });

这次我们传递了一个接受参数的函数,foo使用该参数调用并返回结果。这是foo直接调用的迂回方式,但最终结果是一样的。

于 2013-09-10T08:18:11.613 回答