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則接收一個空數組。