javascript剩余参数是什么_如何使用它

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

JavaScript剩余参数(Rest Parameters)是一种语法特性,允许函数接收任意数量的参数,并将它们收集到一个真正的数组中。它用三个点 ... 加上一个参数名表示,比如 ...args,必须放在参数列表的最后。

剩余参数的基本写法

剩余参数不是 arguments 对象,而是标准数组,可以直接调用 mapfilterreduce 等方法。

  • 定义时写在参数末尾,前面不能有其他必填参数(除非是默认参数或解构)
  • 即使没传额外参数,它也会是一个空数组,不会是 undefined
  • 不能和 arguments 混用(虽然可以共存,但不推荐)

示例:

function sum(...numbers) {
  return numbers.reduce((a, b) => a + b, 0);
}
sum(1, 2, 3); // 6
sum();        // 0

和 arguments 的区别

arguments 是类数组对象,没有数组方法;剩余参数是真数组,更简洁、更现代。

  • arguments 在箭头函数中不可用;剩余参数在箭头函数中完全支持
  • arguments 包含所有实参(包括命名参数),剩余参数只收集“多余”的那部分
  • 剩余参数可配合解构、默认值等新特性一起使用

常见实用场景

剩余参数适合处理不确定参数个数的逻辑,比如工具函数、代理封装、参数预处理等。

  • 函数柯里化或参数预设:把前几个参数固定,其余传给内部函数
  • 日志包装器:在调用原函数前后加日志,不影响参数传递
  • 合并多个数组参数:比如实现自己的 Math.max(...arr1, ...arr2) 类似逻辑
  • 与解构结合:如 function foo(a, b, ...rest),前两个是确定参数,后面全归 rest

注意点和限制

剩余参数不是万能的,使用时需留意语法约束和语义意图。

  • 只能出现在参数列表末尾,否则报错:function f(...rest, last) {}
  • 不能重复出现:function f(...a, ...b) {}
  • 如果函数只有剩余参数,它就是唯一参数,也必须写成 ...args,不能省略 ...
  • 与默认参数共用时,剩余参数仍只收集“未被前面参数匹配”的值