<!DOCTYPE HTML>
<html>
<body>
<script>
sayHi(1,2,3)
function sayHi(x,y,z) {
alert("1:"+arguments[0]);// alert 1 as expected
alert("2:"+arguments[1]);// alert 2 as expected
alert("3:"+arguments[2]);// arert 3 as expected
[].shift.call(arguments);
[].shift.call(arguments);
[].shift.call(arguments);
alert("4:"+x); // alear 3, why?? :/
alert("5:"+y); // alert 3, why?? :/
alert("6:"+z); // alert 3, why?? :/
alert("7:"+arguments[0]); // undefined, no x any more :/
alert("8:"+arguments[1]); // undefined, no y any more :/
alert("9:"+arguments[2]); // undefined, no z any more :/
}
</script>
</body>
</html>
我明白,有每个函数调用的参数里面一个特殊的伪阵列。上面的代码移动了参数的第一个元素,但是当我尝试提醒参数x,y,z的值时,所有的值都是3而不是未定义的。如果参数和参数之间存在关联,那么arguments [0] - > x,arguments [1] - > y,arugments [2] - > z,参数[0],参数[1],参数[2]全部变得不确定,而参数x,y,z都是3?Javascript中参数和参数之间的链接是什么?
有趣的事实:除非他们不成为未定义的实际命名的参数得到与他们的参数数组中的位置有关。所以如果你转移到左边,只有在它们没有变成未定义的时候才会覆盖这些值。你可以通过只移动一次来检查这一点,然后你看到x变成了2,y变成了3,z留下了3.有趣的事情这个javascript;) – Markai 2014-11-03 11:47:01
@Markai谢谢,我再次阅读你的评论,我发现你回答了我的问题!再次感谢! – bean 2014-11-05 11:06:26