剩余参数(...)允许函数接收不定数量实参并自动封装为真数组,必须位于形参末位,可与普通参数共存,替代了arguments类数组对象,支持直接调用数组方法且兼容箭头函数。
JavaScript 剩余参数(Rest Parameters)是一种语法特性,用三个点 ... 表示,允许函数接收**不定数量的实参**,并将它们收集为一个真正的数组。它替代了过去依赖 arguments 类数组对象的写法,更简洁、更强大。
剩余参数必须是函数最后一个形参,且前面不能有其他普通参
数(除非用默认值或解构等配合)。它会把调用时“多出来的”参数自动装进一个数组里。
function sum(...numbers) { return numbers.reduce((a, b) => a + b, 0); }
function demo(a, ...rest, b) { }(剩余参数不能在中间)function greet(first, ...others) { console.log(first, others); }
arguments 是类数组对象,没有数组方法(如 map、filter),需要手动转成数组;而剩余参数本身就是 Array 实例,开箱即用。
Array.from(arguments).map(x => x * 2) 或 [...arguments].map(...)
numbers.map(x => x * 2)(直接调用)arguments 在箭头函数中不可用,剩余参数可以用于任何函数(包括箭头函数)剩余参数特别适合封装工具函数、代理调用、参数预处理等场景。
const merge = (...arrays) => [].concat(...arrays);
const log = (prefix, ...msgs) => console.log(`[${prefix}]`, ...msgs);
const delay = (fn, ms, ...args) => setTimeout(() => fn(...args), ms);
调用时没传额外参数,剩余参数就是空数组,不会是 undefined,这点很安全。
sum() → numbers 是 [],reduce 可正常返回初始值if (numbers.length === 0) throw new Error('至少传一个数');
arguments 混用:用了剩余参数后,arguments 依然存在,但不推荐再用