【发布时间】:2019-03-20 01:03:37
【问题描述】:
我一直在做一个 Web 项目,但在将一个窗口变量分配给 Javascript 中的另一个变量时遇到了问题。
例如,我有一个生成随机码的函数:
window.onload=function(){
...
window.c=genCode(); //Gets an array with 4 strings like ['g', 'r', 'p', 'b'] (first letter of colors of the rainbow)
...
}
稍后在程序中,我有一个测试将使用变量中的数据,并最小化新变量
var guess=function(){
...
let tempC=window.c;
...
for(let i=0;i<4;i++){
...
tempC[i]='n';
...
}
}
局部变量 tempC 已更改,但 window.c 也已更改。
我的解决方法是只使用一个返回变量的函数。
var retCode=function(){
return window.c;
}
这可行,但为什么会发生这种情况?当您将数据分配给变量时,我认为它应该只修改指定的变量,而不是它从中获取数据的变量。这只是 JavaScript 的怪癖吗?是否与window 的工作方式有关?
【问题讨论】:
-
这是因为您正在传递数组的引用。如果你不想改变数组,你必须复制它:
let tempC = JSON.parse(JSON.stringify(window.c));.. 或者真的,看看这个:stackoverflow.com/questions/9885821/… -
一个数组是按引用而不是按值复制的。因此,当您更改 tempC 时,您正在更改 window.c 引用的数组
-
基本上,JS数组是“按引用”复制的,而不是按值复制的,所以
window.c和tempC都指向内存中的同一个数组 -
@Randy - 哈哈,不过,Take 很容易,Tiger。
-
@RandyCasburn 我是一名高中程序员。我还是新手,正在学习如何做很多事情。冷静一下。
标签: javascript