这是《 JavaScript,权威指南》中有关arguments
对象的Core JavaScript Reference的引文:
在非严格模式下,Arguments对象具有一项非常不寻常的功能。
当函数具有命名参数时,
Arguments对象是包含变量的局部变量的同义词
函数参数。 Arguments对象和参数名称
提供两种不同的方式引用同一变量。改变中
具有参数名称的参数的值会更改
通过Arguments对象检索,并更改
通过Arguments对象的参数会更改以下值:
通过参数名称检索。
简单来说,这是什么意思?一个例子会很好。
最佳答案
尝试这个:
function x(a, b) {
arguments[1] = "foo";
console.log(b);
}
x("hello", "world");
您将在控制台中看到
"foo"
。 arguments
对象具有类似数组的属性,这些属性将函数声明的形式参数作为别名。这意味着,当您更改arguments[0]
时,这也将更改第一个显式声明的形式参数的值。 JavaScript中没有其他方法可以对变量使用别名,从而使arguments
变得“异常”。