JavaScript剩余参数(Rest Parameters)是用...args语法将函数末尾的多余参数收集为真数组,支持数组方法且兼容箭头函数,区别于类数组的arguments对象。

JavaScript剩余参数(Rest Parameters)是一种语法特性,允许函数接收任意数量的参数,并将它们收集到一个真正的数组中。它用三个点 ... 加上一个参数名表示,比如 ...args,必须放在参数列表的最后。
剩余参数的基本写法
剩余参数不是 arguments 对象,而是标准数组,可以直接调用 map、filter、reduce 等方法。
- 定义时写在参数末尾,前面不能有其他必填参数(除非是默认参数或解构)
- 即使没传额外参数,它也会是一个空数组,不会是
undefined - 不能和
arguments混用(虽然可以共存,但不推荐)
示例:
function sum(...numbers) {
return numbers.reduce((a, b) => a + b, 0);
}
sum(1, 2, 3); // 6
sum(); // 0
和 arguments 的区别
arguments 是类数组对象,没有数组方法;剩余参数是真数组,更简洁、更现代。
立即学习“Java免费学习笔记(深入)”;
-
arguments在箭头函数中不可用;剩余参数在箭头函数中完全支持 -
arguments包含所有实参(包括命名参数),剩余参数只收集“多余”的那部分 - 剩余参数可配合解构、默认值等新特性一起使用
常见实用场景
剩余参数适合处理不确定参数个数的逻辑,比如工具函数、代理封装、参数预处理等。
- 函数柯里化或参数预设:把前几个参数固定,其余传给内部函数
- 日志包装器:在调用原函数前后加日志,不影响参数传递
-
合并多个数组参数:比如实现自己的
Math.max(...arr1, ...arr2)类似逻辑 -
与解构结合:如
function foo(a, b, ...rest),前两个是确定参数,后面全归 rest
注意点和限制
剩余参数不是万能的,使用时需留意语法约束和语义意图。
- 只能出现在参数列表末尾,否则报错:
function f(...rest, last) {}❌ - 不能重复出现:
function f(...a, ...b) {}❌ - 如果函数只有剩余参数,它就是唯一参数,也必须写成
...args,不能省略... - 与默认参数共用时,剩余参数仍只收集“未被前面参数匹配”的值











