Rest 参数(...args)用于将函数多余实参收集为真数组,必须位于参数末尾,是Array实例可直接调用数组方法,区别于类数组的arguments,适用于日志、代理、解构等场景。

JavaScript 中的 Rest 参数(...args)是一种语法特性,用于将函数调用时**多余的、未被单独声明的参数**自动收集为一个真正的数组。
Rest 参数的基本写法
它必须写在函数参数列表的最后,用三个英文句点 ... 加上一个变量名表示,比如 ...numbers。这个变量会接收所有“剩下的”实参:
- 函数定义时,前面的参数按位置匹配,剩下的全归 Rest 参数
- Rest 参数本身是一个 Array 实例,可以正常使用
map、filter、reduce等数组方法 - 不能有多个 Rest 参数,也不能跟在它后面再写其他命名参数
和 arguments 对象的区别
arguments 是函数内部可用的类数组对象,但它不是真正的数组,也没有数组方法;而 Rest 参数是标准数组,更直观、更易用:
function sum(a, b, ...rest) { return rest.reduce((s, n) => s + n, 0); }- 调用
sum(1, 2, 3, 4, 5)→a=1,b=2,rest = [3, 4, 5] - 而
arguments在该函数中是[1, 2, 3, 4, 5],需手动转成数组才能用reduce
常见使用场景
Rest 参数特别适合处理可变数量参数的函数:
立即学习“Java免费学习笔记(深入)”;
- 封装多参数函数,如日志函数
log(level, ...msgs) - 函数柯里化或代理调用:
function wrapper(...args) { return original(...args); } - 与解构配合,提取前几项后,把其余项收进数组:
const [first, second, ...rest] = arr;
基本上就这些。Rest 参数让 JavaScript 处理不定参数变得更简洁、更符合直觉。











