为什么我们可以用“food”代替“function(x){return foo(x);}”

时间:2013-09-10 08:12:45

标签: javascript

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

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

可以替换为

foo

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

4 个答案:

答案 0 :(得分:2)

因为

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

然后

bar1(5);
bar2(5);

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

答案 1 :(得分:1)

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

长版只是foo的包装,它不会添加任何内容。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

如果您希望将foo作为回调传递,可以直接执行此操作:

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

ITakeACallback(foo);

所以你在这里做的是传递给ITakeACallback一个碰巧是可调用函数的参数; ITakeACallback确实称之为。

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

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

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