我一直在寻找关于 JavaScript 的鲜为人知的事实,我遇到了这篇文章,任何人都可以解释为什么下面的代码
function (x) { return foo(x); }
可以用
foo
试图用我对 JavaScript 的一点了解来解决这个问题,但我没有找到原因。谁能解释一下?
我一直在寻找关于 JavaScript 的鲜为人知的事实,我遇到了这篇文章,任何人都可以解释为什么下面的代码
function (x) { return foo(x); }
可以用
foo
试图用我对 JavaScript 的一点了解来解决这个问题,但我没有找到原因。谁能解释一下?
因为
var bar1 = function (x) { return foo(x); };
var bar2 = foo;
进而
bar1(5);
bar2(5);
第一个将执行将调用的函数,foo(5)
第二个将foo(5)
直接调用。相同的最终结果。
第一个是一个函数,它接受一个参数并返回该foo
参数的任何结果。第二个是一个函数,它接受一个参数(大概)并返回该参数的任何结果(foo
因为它是foo
函数)。
长版本只是一个foo
不添加任何东西的包装器。
function(x){return foo(x);}
实际上是一个无名函数,它将 x 传递给函数 foo。无名函数将在行上返回 foo(x) 的结果,这与在第一个地方return foo(x)
调用foo(x)
而不是在另一个函数中形成相同。
此代码片段假定它foo
已经是当前范围内的函数。
当你想foo
作为回调传递时,你可以直接这样做:
function ITakeACallback(callback) {
callback(42); // and call it
}
ITakeACallback(foo);
所以你在这里所做的是传递给ITakeACallback
一个恰好是可调用函数的参数;ITakeACallback
确实如此。
当然,我们可以传递任何可调用函数:
ITakeACallback(function(x) { return foo(x); });
这次我们传递了一个接受参数的函数,foo
使用该参数调用并返回结果。这是foo
直接调用的迂回方式,但最终结果是一样的。