JS arguments 对象

MDN

在 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; /* ... */ }