箭头函数没有自己的arguments对象,应使用剩余参数(...rest)替代;剩余参数生成真数组,可直接调用数组方法;需兼容旧环境时可用array.from(arguments)或[...arguments]转换;禁止在箭头函数内访问arguments。

箭头函数确实没有自己的 arguments 对象,这是因为它不绑定 arguments、this、super 和 new.target。处理不定参时,推荐用 ES6 的剩余参数(...rest)替代。
用剩余参数(...rest)接收不定数量的参数
这是最直接、最现代的写法,语法清晰,语义明确:
✅ 推荐写法:
const sum = (...nums) => {
return nums.reduce((a, b) => a + b, 0);
};
sum(1, 2, 3); // 6
sum(10, 20, 30, 40); // 100
剩余参数 ...nums 会把所有传入的实参收集为一个真正的数组,可直接调用 map、filter、reduce 等方法。
需要兼容旧环境?用 Array.from(arguments) 或 [...arguments]
如果必须在箭头函数里访问外层函数的 arguments(不推荐),或你在普通函数中调用箭头函数并想透传参数,可借助展开语法或转换:
- 在普通函数内定义箭头函数时,可把外层的
arguments转成数组再传入 -
Array.from(arguments)或[...arguments]都能将类数组转为真数组(注意:箭头函数自身无arguments,所以这操作只能在外层函数做)
⚠️ 注意:不要试图在箭头函数体内写 arguments——会报 ReferenceError。
透传参数给其他函数时,优先用 ...rest 展开
常见场景如封装 console.log、代理 API 调用等:
const log = (...args) => {
console.log('[DEBUG]', ...args); // 正确展开
};
<p>const apiCall = (url, ...params) => {
return fetch(url, { method: 'POST', body: JSON.stringify(params) });
};
</p>
避免用 arguments + apply 这种老式写法,既冗余又易出错。
想模拟 arguments.callee?别做
箭头函数也不支持 arguments.callee(且该特性已被严格模式禁用)。如需递归,应显式命名函数表达式或使用变量引用:
const factorial = (n) => n <p>靠 <code>arguments.callee</code> 实现匿名递归已过时,也不适用于箭头函数。</p>











