当我设置arugments[0] = chewie; arguments[1] = luke
时,它会打印:
巴卡
巴卡
Han Solo
Chewbacca
我的期望如下:
巴卡
Luke Skywalker
Han Solo
Chewbacca
function starWars(luke, darth, han, chewie) {
arguments[0] = chewie;
arguments[1] = luke;
document.write(arguments[0] + "<br>");
document.write(arguments[1] + "<br>");
document.write(arguments[2] + "<br>");
document.write(arguments[3] + "<br>");
}
starWars("Luke Skywalker", "Darth Vader", "Han Solo", "Chewbacca");
任何人都能详细解释一下为什么它不像我预期的那样工作吗?
答案 0 :(得分:3)
在宽松模式下,arguments
中的条目已链接到指定参数。因此,通过设置arguments[0]
,您设置luke.
从字面上看,行arguments[0] = chewie;
和luke = chewie;
可以互换。因此,稍后当您使用arguments[1]
中的luke
时,您将使用更新后的值(chewie
)。
严格模式删除了这个神奇的链接:
"use strict";
function starWars(luke, darth, han, chewie) {
arguments[0] = chewie;
arguments[1] = luke;
console.log(arguments[0]);
console.log(arguments[1]);
console.log(arguments[2]);
console.log(arguments[3]);
}
starWars("Luke Skywalker", "Darth Vader", "Han Solo", "Chewbacca");
&#13;
答案 1 :(得分:1)
您正在使用luke
重新分配chewie
变量,因为argument[0]
是参考到luke
。
所以在arguments[0] = chewie
之后,会发生什么luke = chewie
。
解决方法可能是:
var tempLuke = argument[0];
arguments[0] = chewie;
arguments[1] = tempLuke;
答案 2 :(得分:1)
更改arguments
对象时,还会更改函数的参数变量,因为它包含对变量的引用。
总结
1)arguments[0] = chewie;
在这里,您还将变量luke
设置为chewie(&#39; chewbacca&#39;)
2)参数[1] =卢克;
在这里,卢克已经成了&#39; chewbacca&#39;在第一步。所以,你也在争论dart
&#39; chewbacca&#39;。