剩余参数跟arguments很像,也是存储方法参数的一个局部变量,跟arguments的区别主要在这几个方面:
- 剩余参数只包含了那些没有对应形参的实参,而argements包含了所有传给函数的实参
- arguments不是一个真正的数组,而剩余参数是真正的数组,也就是说剩余参数可以直接使用数组相关的方法,如reduce、forEach、map等
- arguments对象会有一些附加的属性,如callee
语法
function(a, b, ...theArgs){
//...
}
示例
function sum(a, b, ...theArgs){
console.log('theArgs',theArgs)
if(theArgs.length === 0) return 0
return theArgs.reduce((pre,curr) => {
return pre + curr
})
}
console.log(sum(1, 2))
// "theArgs" Array []
// 0
console.log(sum(1, 2, 3))
// "theArgs" Array [3]
// 3
console.log(sum(1, 2, 3, 4))
// "theArgs" Array [3, 4]
// 7
如果函数的最后一个命名参数以...
为前缀,则它将成为一个由剩余参数组成的真数组,其中从0
(包括)到theArgs.length
(排除)的元素由传递给函数的实际参数提供。
在上面的例子中,theArgs
将收集该函数的第三个参数(因为第一个参数被映射到a
,而第二个参数映射到b
)和所有后续参数。