JavaScript中的剩余参数是指函数定义时以...为前缀的参数,这个参数是一个没有对应形参的实参组成的一个数组,所以它与arguments有一定的区别,剩余参数中可以使用push、map等数组方法
function num(a,b,...arg){
console.log(arg);
arg.push(a,b);
console.log(arg);
}
num(1,2,3,4,5);//[3,4,5] [3,4,5,1,2]
因为使用方法<code>functionName.length</code>可以获取函数对应的形参个数,其中functionName.length为对应的函数名,所以可以用arguments模拟剩余参数
function arg(a,b){
console.log(arg.length);
var newArg=Array.prototype.slice.call(arguments,arg.length);
console.log(newArg);
}
arg(1,2,3,4,5);//2 [3,4,5]
说明一下slice的用法,当slice方法没有参数时,返回原来的数组,当参数只有一个时,则得到第二个参数之后所有元素组成的新数组,因此,补全上面的slice参数,就是
function arg(a,b){
console.log(arg.length);
var newArg=Array.prototype.slice.call(arguments,arg.length,arguments.length);
console.log(newArg);
}
arg(1,2,3,4,5);//2 [3,4,5]
call方法中第二个参数开始接受的是传递给方法的参数,而apply方法接受的是参数组成的数组,所以使用apply方法就是
function arg(a,b){
console.log(arg.length);
var newArg=Array.prototype.slice.apply(arguments,[arg.length,arguments.length]);
console.log(newArg);
}
arg(1,2,3,4,5);//2 [3,4,5]
剩余参数可以使用数组的任意方法:
function num(...arg){
return arg.map(function(ele){
return ele*ele;})
}
num(2,3,4);//[4,9,16]










网友评论