如果参数改变,`arguments`对象会改变

时间:2014-02-01 02:51:31

标签: javascript scope arguments

我刚刚发现,如果其中一个参数发生变化,arguments对象实际上会发生变化。

例如:

function some(a, b, c ){
  console.log(arguments);


  args = [ a, b, c ];
  a = new Date();

  console.log(arguments);
  console.log(args);
}

some(1,2,3 );

您会看到args保持不变(预期行为),arguments 实际更改。

问题:

  • 这是有充分记录的吗?如果是的话,在哪里?

  • 我需要注意arguments对象吗?

1 个答案:

答案 0 :(得分:4)

这在ECMA标准sec-10.6中指定:

  

对于非严格模式函数[...]的形式参数的数量   相应的函数对象最初与其共享其值   函数执行中相应的参数绑定   上下文。这意味着更改属性会更改   参数绑定的对应值,反之亦然。这个   如果删除了这样的属性,那么对应就会被破坏   重新定义或者如果属性被更改为访问者属性。对于   strict模式函数,arguments对象的属性值   只是传递给函数的参数的副本,并且有   属性值与形式之间没有动态联系   参数值。