我在《权威指南》中看到了这段代码:
function not(f)
{
return function()
{
var result=f.apply(this,arguments);
return !result;
}
}
我理解不了的是,由于函数 f
已经在闭包中,它的 this
已经是当前的 this
,为什么这段代码片段不直接使用 var result=f(arguments);
?
我甚至读过一些使用 undefined/null 作为第一个参数的 call
,我认为这些完全可以被直接调用替代:
...
while(i>len)
{
if(i in a)
accumulator=f.call(undefined,accumulator,a[i],i,a);
i++;
}
...
作者为什么使用call()而不是直接调用?直接调用函数和带有undefined作为第一个参数的call()
之间有什么区别吗?
call()
是什么意思? - dotslashluundefined
将被全局对象替换(但仅适用于调用本地函数对象的情况,对于内置方法或主机方法可能不起作用)。请参见 ECMA §15.3.4.4 和 §13.2.1。 - RobG.call()
代码片段有什么好处。(似乎与在其他代码片段中使用.apply()
的原因完全无关。) - nnnnnn