这是《 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变得“异常”。

10-06 05:27
查看更多