Pro*_*one 3 javascript call apply
编辑:由于我的误解,这个问题被问到了.请谨慎行事,因为阅读它可能会浪费您的时间.
我想call并且apply会在给定一组参数的情况下执行函数,但是我的测试结果令人困惑.看我的测试代码:
window.z = 0;
(function(){++(window.z)}).call(this, 1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
我希望z在执行后会是3.但是,z是1.
(function(){++(window.z)}).apply(this, [1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
同样在这里.z == 1;
我也试过简单地记录输入参数:
var x = function(y){console.log(y);}
x.call(this, 1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
结果?仅记录1.
我在这做错了什么?
(使用Firebug在Chrome和Firefox中测试过.)
双方call并apply只调用函数一次.不同之处在于如何传递调用的参数.
通过调用,上下文(第一个参数)之后的每个参数都是一个参数.使用apply,第二个参数应该是一个类似于参数对象的数组(第一个参数仍然提供上下文).
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;
Run Code Online (Sandbox Code Playgroud)
如果要多次调用该函数,只需将调用置于循环中即可完成此操作.