<!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