我一直在寻找关于JavaScript的鲜为人知的事实,我遇到过这篇文章,任何人都可以解释为什么以下代码
function (x) { return foo(x); }
可以替换为
foo
试图用我对JavaScript的一点知识来解决这个问题,但我找不到原因。谁能解释一下呢?
答案 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
的迂回方式,但最终结果是相同的。