ES6剩余参数用...接收不确定数量的尾部实参并形成真数组;必须位于参数末尾且唯一,可直接调用数组方法,区别于类数组arguments,适用于工具函数、代理调用等场景。

ES6 的剩余参数(Rest Parameters)用三个点 ... 表示,专门用来接收函数中**不确定数量的尾部实参**,并自动把它们收集为一个真正的数组。
基本写法:放在参数列表末尾
剩余参数必须是函数参数列表中的最后一个,且只能有一个。它不是类数组对象,而是标准 Array 实例,可直接调用 map、filter、reduce 等方法。
- ✅ 正确写法:
function sum(a, b, ...nums) { return nums.reduce((s, n) => s + n, 0); } - ❌ 错误写法:
function fn(...nums, last) { }(剩余参数不能在最后之外的位置) - ❌ 错误写法:
function fn(...a, ...b) { }(只允许一个剩余参数)
和 arguments 的关键区别
arguments 是函数内部的类数组对象,没有数组方法;而剩余参数是真数组,更简洁、语义更清晰。
- 旧写法(需转换):
Array.from(arguments).slice(1)或[].slice.call(arguments, 1) - 新写法(一步到位):
function fn(first, ...rest) { console.log(rest); } - 箭头函数里没有
arguments,但可以放心用剩余参数
常见实用场景
适合封装工具函数、代理调用、参数预处理等。
立即学习“Java免费学习笔记(深入)”;
-
求和或拼接:
const concat = (...items) => items.join(''); -
包装原生方法:
const log = (prefix, ...args) => console.log(`[${prefix}]`, ...args); - 兼容性兜底:当部分参数有默认值时,剩余参数仍能准确捕获“额外”的那些
不复杂但容易忽略:剩余参数只收集“未被前面参数匹配到”的实参,和调用时传了多少个无关,只和形参定义顺序有关。


















