剩余参数必须位于函数参数列表末尾且唯一,语法为...rest,用于收集未匹配的实参;不可与其它参数混排,不支持多个;是Array实例,可直接调用数组方法,替代arguments;可与默认参数共存,但默认值求值先于剩余参数收集。

剩余参数(Rest Parameters)必须放在函数参数列表的最后,且每个函数最多只能有一个剩余参数。
必须位于参数列表末尾
剩余参数使用三个点(...)加参数名的形式定义,它会收集所有未被前面参数匹配的实参。因此语法上不允许出现在其他参数之前,否则会导致解析错误。
- ✅ 正确:function fn(a, b, ...rest) { }
- ❌ 错误:function fn(...rest, a, b) { }
- ❌ 错误:function fn(a, ...rest, b) { }
只能有一个剩余参数
JavaScript 不支持多个剩余参数。即使语义上看似合理,如拆分前后若干参数,语法也禁止这样写。
- ✅ 正确:function fn(...args) { }
- ✅ 正确:function fn(x, y, ...rest) { }
- ❌ 错误:function fn(...first, ...last) { }
不能与 arguments 同时用于获取参数
剩余参数是 arguments 的现代替代方案,两者目的相似但机制不同。在使用了剩余参数的函数中,arguments 仍存在,但推荐优先使用剩余参数,因其是真正的数组,支持 map、filter 等方法,且更符合 ES6+ 语义。
立即学习“Java免费学习笔记(深入)”;
- 剩余参数是 Array 实例,可直接调用数组方法
- arguments 是类数组对象,需转换才能使用数组方法
- 箭头函数中没有 arguments,但可以使用剩余参数
不与默认参数冲突,但需注意执行顺序
剩余参数可以和默认参数共存,但默认参数的求值发生在剩余参数收集之前。也就是说,即使某个形参有默认值,只要它没被传入实参,就会被跳过,剩余参数只收集“明确未被前序参数接收”的值。
- function fn(a = 10, b, ...rest) { } —— 调用 fn(5) 时,a=5,b=undefined,rest=[]
- 调用 fn(5, 6, 7, 8) 时,a=5,b=6,rest=[7, 8]


















