我在权威指南中阅读了这个片段:
function not(f)
{
return function()
{
var result=f.apply(this,arguments);
return !result;
}
}
我无法理解的是,由于此函数f
位于闭包中,因此this
已经this
,为什么此代码段不会直接使用{{1} }}?
我甚至读了一些带有undefined / null的var result=f(arguments);
作为第一个参数,我认为可以用直接调用完全取代:
call
为什么作者使用call()而不是直接调用?直接函数调用和...
while(i>len)
{
if(i in a)
accumulator=f.call(undefined,accumulator,a[i],i,a);
i++;
}
...
之间是否有任何区别,因为它是第一个参数?
答案 0 :(得分:4)
var result=f(arguments);
...将调用f()
传递一个参数arguments
对象。
var result=f.apply(this,arguments);
...将f()
分别调用arguments
对象中的参数(可以这么说)。
所以让我们说f()
被定义为:
function f(a,b,c) {
// do something with a, b, c
return c;
}
然后给出三个参数1,2,3
,arguments
的直接调用是这样的:
f([1,2,3]);
(请注意arguments
类似数组; 它不是实际数组。)
.apply()
版本是这样的:
f(1,2,3);