给出以下代码:
/*jslint white:true, devel:true*/
var foo = function () {
'use strict';
console.log(
Array.prototype.slice.call(
/* How can I send more arguments to call after 'arguments'? */
arguments,
/*
This function gets sent to slice.
If I sent a '2' it would start the array at the third index.
*/
function () {
console.log("bar");
}
)
);
};
foo(1, 2, 3, 4, 5, 6);
我正在努力更好地理解参数在此上下文中的工作原理。似乎第二个参数总是被发送到切片。
有没有办法在此上下文中发送另一个参数来调用?或者我是否需要将代码与.slice()
分开重写.call()
?
更新:
我不确定为什么这会被低估。我的概念误解是.slice
正在接管,而不是通过.call()
传递所有论点。感谢Quentin澄清它。
答案 0 :(得分:2)
似乎第二个参数总是被发送到切片。
call
的第一个参数是this
应该处理的slice
的值。即如果arguments.slice(...)
是一个数组而不是类似数组的对象,它就像arguments
一样,它没有自己的slice
方法。
call
的第二个参数是slice
的第一个参数。即数组中的偏移量以开始切片。传递函数并不像你在问题中那样有意义。
有没有办法在此上下文中发送另一个参数来调用?
是。就这么做。
call
的第三个参数是slice
的第二个参数。即停止切片的索引。
call
的第四个参数是slice
的第三个参数,但slice
只接受两个参数,因此再传递它是没有意义的。