我刚刚发现,如果其中一个参数发生变化,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
对象吗?
答案 0 :(得分:4)
这在ECMA标准sec-10.6中指定:
对于非严格模式函数[...]的形式参数的数量 相应的函数对象最初与其共享其值 函数执行中相应的参数绑定 上下文。这意味着更改属性会更改 参数绑定的对应值,反之亦然。这个 如果删除了这样的属性,那么对应就会被破坏 重新定义或者如果属性被更改为访问者属性。对于 strict模式函数,arguments对象的属性值 只是传递给函数的参数的副本,并且有 属性值与形式之间没有动态联系 参数值。