[英]Arguments object is not showing correct result
看这段代码
enter code here
function foo(a, b) {
arguments[1] = 2;
alert(b);
}
console.log(foo(1));
其显示undefined
我无法理解为什么..因为当我们通过辩论者时
foo(1) `arguments[0]=1` right.?
并且当我们alert(b)
它应该显示2,因为我们设置了arguments[1] = 2
; 我很困惑..请帮助。 谢谢。
通过arguments
对象仅对调用函数时存在的原始参数进行“别名”处理,以便您可以更改参数对象并使其自动影响命名的函数参数。
仅供参考,在严格模式下, arguments
对象上的所有项目都不会别名化回命名的函数形参。 但是,在非严格模式下,原来存在的参数(只有那些参数)会通过arguments
对象作为别名。
请记住,arguments对象不是真正的数组。 它是对象的一种特殊类型,这种特殊的“混叠”行为仅存在于调用函数时最初放置在该对象中的对象的属性,而不存在于您可能自己添加的属性。 由于arguments[1]
最初不存在,因此没有此特殊功能。
看到这个:
function foo(a, b) {
console.log(arguments.length); // 1
arguments[1] = 2;
console.log(arguments.length); // still 1
console.log(arguments[1]); // does show 2
console.log(b); // undefined, arguments[1] is not aliased to b
}
console.log(foo(1));
手动将元素添加到arguments
将无法正确设置setter和getter。 甚至.length
都不会更新。
function foo(a, b){
arguments[1] = 2;
console.log(arguments.length); //1
}
foo(1);
简介:不要将元素添加到arguments
。 请记住, arguments
不是数组。
b
保持undefined
是有道理的。 运行foo(1)
,它将a
初始化为1
并将b
初始化为undefined
。 修改arguments
对象不会改变它。 也就是说, b
没有绑定到arguments[1]
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.