Javascript调用和应用函数只调用第一个参数?

时间:2011-12-22 15:09:45

标签: javascript call apply

编辑:由于我的误解,这个问题被问到了。请谨慎行事,因为阅读它可能会浪费你的时间。

我认为callapply会在给定一组参数的情况下执行函数,但是我的测试结果令人困惑。看我的测试代码:

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中测试过。)

3 个答案:

答案 0 :(得分:6)

callapply都只调用一次该函数。不同之处在于如何传递调用的参数。

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

function foo(a, b, c) {

};

foo.call(this, 1, 2, 3); // a == 1, b == 2, c == 3;
foo.apply(this, [1,2,3]); // a == 1, b == 2, c == 3;

如果您想多次调用该函数,只需将调用置于循环中即可完成此操作。

答案 1 :(得分:3)

这是预期的,您传递的参数将出现在您的增量函数中(如arguments请参阅here for reference),但您只调用该函数一次。

答案 2 :(得分:2)

您似乎认为callapply方法应为每个参数调用一次功能。情况并非如此,它只调用一次函数。

apply方法接受一组参数:

func.apply(this, [1, 2, 3]);

call方法采用参数列表:

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