javascript中剩余参数用...args收集函数末尾所有实参,生成真数组可直接调用map/filter等方法;必须位于参数列表末尾且唯一,区别于类数组的arguments,适用于不定参数求和、转发调用等场景。

JavaScript中用剩余参数(Rest Parameter)获取函数所有剩余实参,只需在函数参数列表末尾用三个点 ... 加一个参数名,比如 ...args。它会把该位置之后的所有实参自动收集为一个真正的数组,可直接调用 map、filter 等数组方法。
语法:用 ...args 收集剩余参数
剩余参数必须放在参数列表的最后,且只能有一个。它不是类数组对象,而是标准数组,无需转换就能使用数组方法。
- 正确写法:
function sum(a, b, ...rest) { }——a和b接收前两个实参,其余全进rest - 错误写法:
function fn(...rest, last) { }—— 剩余参数不能在其他参数后面 - 错误写法:
function fn(...a, ...b) { }—— 不允许多个剩余参数
和 arguments 的区别
arguments 是函数内自带的类数组对象,不是真数组;而剩余参数是真数组,更简洁安全。
-
arguments在箭头函数中不可用,剩余参数可以 -
arguments包含所有实参(包括已命名参数),剩余参数只包含“剩余”的那部分 - 想用数组方法时,
arguments得先转成数组:Array.from(arguments)或[...arguments];剩余参数直接可用
常见实用场景
剩余参数适合处理不定数量参数的函数,比如求和、拼接、转发调用等。
-
不定参数求和:
const sum = (...nums) => nums.reduce((a, b) => a + b, 0); -
包装并转发调用:
const logAndCall = (fn, ...args) => { console.log(args); return fn(...args); }; -
解构结合使用:
const [first, ...others] = [...args];—— 轻松分离首项与其余项
注意边界情况
如果没有额外实参传入,剩余参数就是空数组 [],不会是 undefined,可放心遍历或展开。
-
sum(1, 2)→...rest是[] -
sum(1, 2, 3, 4)→rest是[3, 4] - 即使只传一个实参,只要参数位置在剩余参数之前,它就不会被收集进去
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











