arguments 是传统函数中自动存在的类数组对象,用于访问所有实参,具备 length 属性和数字索引(如 arguments[0]),但非真数组;严格模式下禁用 callee 且不可修改;箭头函数无 arguments,需用剩余参数替代。

在传统函数(非箭头函数)中,arguments 是一个类数组对象,自动存在于函数作用域内,用于访问传入的所有实参,即使没有显式声明对应形参。
arguments 是什么?
arguments 不是真正的数组,但拥有 length 属性和按数字索引访问的能力(如 arguments[0])。它还包含 callee(指向当前函数)等属性(严格模式下禁用 callee)。
注意:箭头函数没有 arguments,需改用剩余参数(...args)替代。
获取参数个数和逐个访问
直接通过 arguments.length 获取实际传入参数的数量,再用索引遍历:
function sum() { let total = 0; for (let i = 0; i- 调用
sum(1, 2, 3)返回6;sum(5)返回5;sum()返回0
转换为真数组以便使用数组方法
因 arguments 缺少 map、filter 等方法,常用以下方式转成数组:
-
Array.prototype.slice.call(arguments)(ES5 常用) -
[].slice.call(arguments)(简写形式) -
Array.from(arguments)(ES6+ 推荐,语义清晰) -
[...arguments](ES6+ 扩展运算符,最简洁,但仅适用于可迭代环境,arguments在大多数引擎中支持)
例如:function logArgs() { console.log(Array.from(arguments).map(x => x * 2)); }
模拟重载或可变参数函数
利用 arguments.length 区分不同调用方式,实现类似函数重载的效果:
function greet() { if (arguments.length === 1) return "Hello, " + arguments[0]; if (arguments.length === 2) return arguments[0] + ", " + arguments[1]; return "Hi there!"; }-
greet("Alice")→"Hello, Alice";greet("Hi", "Bob")→"Hi, Bob"
不过更现代的做法是用默认参数 + 剩余参数(function greet(name, ...rest)),语义更强且利于 TypeScript 类型推导。
不复杂但容易忽略:arguments 只在传统函数体内可用,且严格模式下无法修改其值(如重新赋值 arguments[0] = 10 不影响形参绑定)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











