Javascript调用和应用函数仅在第一个参数上调用?

Javascript调用和应用函数仅在第一个参数上调用?,javascript,call,apply,Javascript,Call,Apply,编辑:这个问题是由于我的误解而提出的。小心阅读,因为阅读可能会浪费你的时间 我以为call和apply会在给定一组参数的情况下执行一个函数,但我得到了令人困惑的测试结果。请参阅我的测试代码: window.z = 0; (function(){++(window.z)}).call(this, 1, 2, 3) 我希望执行后z为3。然而,z是1 (function(){++(window.z)}).apply(this, [1, 2, 3]) 这里也一样z==1 我还尝试简单地记录输入参数:

编辑:这个问题是由于我的误解而提出的。小心阅读,因为阅读可能会浪费你的时间

我以为
call
apply
会在给定一组参数的情况下执行一个函数,但我得到了令人困惑的测试结果。请参阅我的测试代码:

window.z = 0;
(function(){++(window.z)}).call(this, 1, 2, 3)
我希望执行后
z
为3。然而,z是1

(function(){++(window.z)}).apply(this, [1, 2, 3])
这里也一样<代码>z==1
我还尝试简单地记录输入参数:

var x = function(y){console.log(y);}
x.call(this, 1, 2, 3);
结果如何?只有1个被记录。
我做错了什么

(使用Firebug在Chrome和Firefox中测试。)

两者都有,并且只调用该函数一次。区别在于调用的参数是如何传递的

通过调用,上下文(第一个参数)后面的每个参数都是一个参数。使用apply时,第二个参数应该是类似数组的参数对象(第一个参数仍然提供上下文)


如果要多次调用该函数,只需将调用放入循环即可完成此操作。

这是意料之中的,您传递的参数将出现在增量函数中(如
参数
请参阅),但是您只调用了一次函数。

您似乎觉得
调用
应用
方法应该为每个参数调用一次函数。事实并非如此,它只调用函数一次

apply
方法采用一组参数:

func.apply(this, [1, 2, 3]);
调用
方法采用参数列表:

func.call(this, 1, 2, 3);
func.call(this, 1, 2, 3);