arguments只在函数内部起作用,是该函数调用者传入的所有参数。arguments是个类数组。将arguments转换为真正数组一般使用Array.prototype.slice.call(arguments),而rest参数接收函数多余的参数,形成的是一个真正的数组,可以直接应用sort, map等数组的方法
因为js函数允许接收任意个参数,所以如果有需求要求获得除已定参数之外的所有参数,我们就得这么去写:
var rest = [];
function test(x,y) {
let i ;
let len = arguments.length;
if (len > 2) {
for (i = 2; i<len;i++){
rest.push(arguments[i]);
}
}
console.log(x,y);//1 2
console.log(rest);//[3, 4, 5, 6]
}
test(1,2,3,4,5,6);
这时候ES6的Rest实现起来就容易多了。(Rest参数必须写在形参的后面,用...标识)上面的函数函数可以改成下面这样:
function test(x,y,...rest) {
console.log(x,y);
console.log(rest);
}
test(1,2,3,4,5,6);//结果:console.log(x,y);//1 2 , console.log(rest);//[3, 4, 5, 6]
test(1);//结果:console.log(x,y);// 1 undefined , console.log(rest);//[]
传入函数的参数先绑定x和y,剩余的参数以数组的形式赋给了rest。如以上第二个test函数连正常的参数都没传满的时候, Rest则接收一个空数组。