JS arguments 对象
在 JS 中,函数访问自己的参数除了典型的声明+访问,还可以通过 arguments
变量来访问(这个变量不需要任何形式的声明,会自动存在于函数内)
这个参数的存在主要是为了可变参数函数使用的;在 ES6 开始,建议直接使用新的 ...args
剩余参数语法来处理可变参数
类数组
arguments
是一个类数组参数,它可以获取 length
属性、可以利用数字下标读取、可以用迭代器来循环,但是不存在其他标准 Array 存在的方法,如需使用可先利用 Array.of(arguments)
或 [...arguments]
来先转换成数组
修改 arguments
应当始终避免对于 arguments 的修改
在非严格模式下,如果所有的函数参数都是简单参数(不存在默认值、解构、默认参数),那么 arguments
会和函数的实际参数保持一致 —— 对任一的修改会同时影响到另一个
否则(严格模式 / 使用了非简单参数),不会影响
可以简单记忆成,如果使用了非简单参数,
function myFunc(a, b=1) { /* ... */ }
实际做的事情是
function myFunc() {
const {a, b=1} = arguments;
/* ... */
}