剩余参数(...rest)是函数最后一个形参,用于收集未被前面形参匹配的所有多余实参并封装为真数组;它必须居末、唯一,即使无多余参数也返回空数组[],且区别于arguments——它是真正的Array实例,支持map/filter/展开等操作。

JavaScript 中的剩余参数(Rest Parameters)用三个点 ... 表示,专门用来收集函数调用时传入的、未被前面形参匹配的**所有多余参数**,并把它们自动封装成一个真正的数组。
语法和基本用法
剩余参数必须是函数最后一个形参,且只能有一个。它接收从该位置开始的所有剩余实参:
- 写法:
function fn(a, b, ...rest) { }——rest就是包含其余参数的数组 - 不能出现在普通参数之前,也不能跟在另一个剩余参数后面
- 即使没传多余参数,
rest也会是空数组[],不会是undefined
和 arguments 的关键区别
剩余参数不是 arguments 对象的替代品,而是更现代、更实用的方案:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
...rest是真数组,可直接用.map()、.filter()、...展开等数组方法 -
arguments是类数组对象,没有数组方法,需转成数组才能操作(如[...arguments]) - 箭头函数中没有
arguments,但可以正常使用剩余参数
常见使用场景
剩余参数特别适合处理“参数个数不确定”的函数:
立即学习“Java免费学习笔记(深入)”;
-
求和函数:
const sum = (...nums) => nums.reduce((a, b) => a + b, 0); -
包装已有函数并追加参数:
const logWithPrefix = (prefix, ...args) => console.log(`[${prefix}]`, ...args); -
部分参数预设(类似柯里化简化版):
const createUrl = (base, ...paths) => base + paths.map(p => '/' + p).join('');
注意边界情况
剩余参数只收集“未被前面形参占用”的实参,与是否传值无关:
-
function f(x, y, ...rest) {}:调用f(1)→x=1,y=undefined,rest=[] -
f(1, 2, 3, 4)→x=1,y=2,rest=[3, 4] - 默认参数不影响剩余参数的起始位置,例如
function g(a=10, ...rest){},g(5, 6, 7)中rest仍是[6, 7]

















