箭头函数没有自己的arguments对象,应使用剩余参数(...args)替代;也可在外层普通函数中用[...arguments]转为数组再传入;参数结构固定时优先用命名参数加默认值;通用工具函数建议直接接收数组。

箭头函数本身没有自己的 arguments 对象,这不是 bug,而是设计决定——它不绑定 arguments、this、super 或 new.target,而是沿作用域链向上查找。所以不能在箭头函数里直接写 arguments,否则会报 ReferenceError: arguments is not defined,或意外取到外层普通函数的 arguments。
用剩余参数(...args)替代
这是最推荐、最现代的写法。剩余参数是真正的数组,支持 .map()、.reduce() 等所有数组方法,语义清晰,也便于 TypeScript 类型标注。
- 必须放在参数列表末尾,且只能有一个:例如
(a, b, ...rest) => {...} - 可直接解构使用:
(first, second, ...others) => console.log(first, others) - 适合处理不定长参数场景,比如通用日志、求和、参数转发等
在外层普通函数中捕获并传入
当需要兼容老环境,或调用方无法修改时,可在外层用 function 获取 arguments,转成数组后再传给箭头函数。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 推荐用
Array.from(arguments)或展开语法[...arguments]转为真数组 - 避免
Array.prototype.slice.call(arguments)这类旧写法 - 示例:
function outer() { const args = [...arguments]; const handler = () => console.log(args); handler(); }
按需使用命名参数 + 默认值
如果参数结构固定,比如最多三个、有明确含义,就别绕弯子用 arguments 或 rest——直接写清楚形参,加默认值更安全、可读性更强。
- 编辑器能提示、类型检查更准、调用时不易出错
- 例如:
const format = (text, prefix = '', suffix = '.') => `${prefix}${text}${suffix}` - 比
(...args) => {...}更利于维护和协作
工具函数统一接收数组入参
对 max、min、compose、pipe 这类通用工具函数,建议直接要求传入数组,而不是依赖运行时推断参数个数。
- 调用更明确:
sum([1, 2, 3])比sum(1, 2, 3)更易封装和测试 - 避免因参数数量变化引发逻辑歧义
- 与 rest 参数配合自然:
const sum = (...nums) => nums.reduce((a, b) => a + b, 0)

















