我刚刚发现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
actually change.
问题:
这是 ECMA 标准中指定的sec-10.6 http://www.ecma-international.org/ecma-262/5.1/#sec-10.6:
对于非严格模式函数 [...] 形式参数的数量
相应的函数对象最初与以下对象共享它们的值
函数执行中相应的参数绑定
语境。这意味着改变属性会改变
参数绑定的相应值,反之亦然。这
如果删除这样的属性,那么对应关系就会被破坏
重新定义或者该属性更改为访问器属性。为了
严格模式函数,参数对象属性的值
只是传递给函数的参数的副本,并且有
财产价值和正式财产之间没有动态联系
参数值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)