Javascript参数对象未按预期工作

Javascript参数对象未按预期工作,javascript,arguments,Javascript,Arguments,当我设置arumings[0]=chuie时;参数[1]=luke它打印: 丘巴卡 丘巴卡 汉·索洛 丘巴卡 我所期望的是: 丘巴卡 卢克·天行者 汉·索洛 丘巴卡 功能星球大战(卢克、达斯、汉、丘伊){ 参数[0]=丘伊; 论点[1]=卢克; 写入(参数[0]+“”); 写(参数[1]+“”); 写(参数[2]+“”); 写(参数[3]+“”); } 星球大战(“卢克·天行者”、“达斯·维德”、“汉·索洛”、“丘巴卡”)您正在使用chuwie为luke变量赋值,因为参数[0]是luke的引

当我设置
arumings[0]=chuie时;参数[1]=luke
它打印:

丘巴卡

丘巴卡

汉·索洛

丘巴卡

我所期望的是:

丘巴卡

卢克·天行者

汉·索洛

丘巴卡

功能星球大战(卢克、达斯、汉、丘伊){
参数[0]=丘伊;
论点[1]=卢克;
写入(参数[0]+“
”); 写(参数[1]+“
”); 写(参数[2]+“
”); 写(参数[3]+“
”); }
星球大战(“卢克·天行者”、“达斯·维德”、“汉·索洛”、“丘巴卡”)
您正在使用
chuwie
luke
变量赋值,因为
参数[0]
luke
引用

所以在
arguments[0]=chuie
之后,发生的是
luke=chuie

解决办法可以是:

var tempLuke = argument[0];
arguments[0] = chewie;
arguments[1] = tempLuke;

由于
参数[0]
是对
luke
引用,因此您将
luke
变量赋值为
chuwie

所以在
arguments[0]=chuie
之后,发生的是
luke=chuie

解决方案可以是:

var tempLuke = argument[0];
arguments[0] = chewie;
arguments[1] = tempLuke;

更改
参数
对象时,也会更改函数的参数变量,因为它包含对变量的引用

概括

1)
参数[0]=chuwie

在这里,您还将变量
luke
设置为chuwie('chuwbacca')

2) 论点[1]=卢克


在这里,卢克在第一步就已经成为了“丘巴卡”。因此,您正在使参数
dart
也成为“chewbacca”。

当您更改
arguments
对象时,您也会更改函数的参数变量,因为它包含对变量的引用

概括

1)
参数[0]=chuwie

在这里,您还将变量
luke
设置为chuwie('chuwbacca')

2) 论点[1]=卢克


在这里,卢克在第一步就已经成为了“丘巴卡”。因此,您正在使参数
dart
也成为“chewbacca”。

在松散模式下,
参数中的条目
链接到指定参数。因此,通过设置
参数[0]
,您正在设置
卢克。
字面上,行
参数[0]=chuie
luke=chuie可以互换。因此,稍后当您使用
luke
中的
arguments[1]
时,您使用的是更新后的值(
chuie

严格模式删除此神奇链接:

“严格使用”;
功能星球大战(卢克、达斯、汉、丘伊){
参数[0]=丘伊;
论点[1]=卢克;
log(参数[0]);
log(参数[1]);
log(参数[2]);
log(参数[3]);
} 

星球大战(“卢克·天行者”、“达斯·维德”、“汉·索洛”、“丘巴卡”)在松散模式下,
参数
中的条目链接到命名参数。因此,通过设置
参数[0]
,您正在设置
卢克。
字面上,行
参数[0]=chuie
luke=chuie可以互换。因此,稍后当您使用
luke
中的
arguments[1]
时,您使用的是更新后的值(
chuie

严格模式删除此神奇链接:

“严格使用”;
功能星球大战(卢克、达斯、汉、丘伊){
参数[0]=丘伊;
论点[1]=卢克;
log(参数[0]);
log(参数[1]);
log(参数[2]);
log(参数[3]);
} 

星球大战(“卢克·天行者”、“达斯·维德”、“汉·索洛”、“丘巴卡”)不应手动为
参数
赋值。在几乎所有情况下,不再需要在ES2015或更高版本中使用
arguments
对象,因为
arguments[0]
luke
是完全相同的东西。不是两个引用同一个值,但基本上都是同一个变量。如果更改
参数[0]
luke
也将更改;反之亦然。知识到此为止;没有理由解释它,甚至没有理由使用它。听@naomik,尽量避免
arguments
对象。不应手动将值分配给
arguments
。在几乎所有情况下,不再需要在ES2015或更高版本中使用
arguments
对象,因为
arguments[0]
luke
是完全相同的东西。不是两个引用同一个值,但基本上都是同一个变量。如果更改
参数[0]
luke
也将更改;反之亦然。知识到此为止;没有理由解释它,甚至没有理由使用它。听@naomik,尽量避免使用
参数
对象。