在 JavaScript 中,Rest 参数(Rest Parameters) 是 ES6 引入的一项重要特性,它允许我们将多个独立的参数收集为一个数组。这在处理参数个数不确定的函数时非常有用,可以替代传统的 arguments 对象,使代码更简洁、更易读。
✅ 一句话总结
Rest 参数使用
...语法,将函数调用时传入的多个参数“收拢”为一个数组,适用于参数个数不确定或需要处理剩余参数的场景。
✅ 一、基本用法
function sum(...numbers) {
return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(4, 5)); // 9
console.log(sum()); // 0
📌 特点:
...numbers会将所有传入的参数收集为一个数组;- 如果没有传参,
numbers是一个空数组;
✅ 二、与 arguments 的对比
| 特性 | arguments | Rest 参数(...args) |
|---|---|---|
| 类型 | 伪数组(类数组对象) | 真正的数组 |
| 可用方法 | 不能直接使用数组方法(如 map、filter) | 可直接使用数组方法 |
| 箭头函数支持 | arguments 在箭头函数中不能使用 | Rest 参数可以在箭头函数中使用 |
| 是否必须是最后一个参数 | ❌ 不是必须的 | ✅ 必须是最后一个参数 |
✅ 三、Rest 参数的使用场景
场景 1️⃣:处理不定数量的参数
function log(...messages) {
messages.forEach(msg => console.log(msg));
}
log('Hello', 'World', '!');
// 输出:
// Hello
// World
// !
场景 2️⃣:获取函数的“剩余参数”
function printUser(id, ...rest) {
console.log('ID:', id);
console.log('Other Info:', rest);
}
printUser(1, 'Tom', 20);
// ID: 1
// Other Info: ['Tom', 20]
📌 说明:
- 第一个参数
id被单独提取; - 剩下的参数被收集到
rest数组中;
场景 3️⃣:函数参数解构 + Rest
function sort([first, ...rest]) {
console.log('First:', first);
console.log('Rest:', rest);
}
sort([10, 20, 30]);
// First: 10
// Rest: [20, 30]
📌 说明:
first提取第一个元素;rest收集剩余元素;
✅ 四、注意事项
| 注意点 | 说明 |
|---|---|
| 只能有一个 Rest 参数 | Rest 参数必须是函数参数列表的最后一个 |
| 不能用于对象解构 | 对象解构中 ... 是扩展运算符,不是 Rest 参数 |
| 与默认值配合使用 | 可以给 Rest 参数设置默认值,但通常不推荐 |
✅ 五、一句话总结
Rest 参数是 JavaScript 中处理不确定数量参数的强大工具,它使用
...args的语法将多个参数合并为一个数组,替代了传统的arguments,更简洁、更强大,是现代函数定义中不可或缺的一部分。
💡 进阶建议
- 在 React/Vue 中,Rest 参数常用于提取组件的剩余 props;
- 结合 TypeScript 可以对 Rest 参数进行类型标注,如
function example(...args: string[]); - 使用 Lodash 的
rest函数可以实现更复杂的参数处理; - 在函数柯里化、参数代理等高级函数技巧中也常使用 Rest 参数;