gpt4 book ai didi

javascript - 为什么 for 循环修改行(Javascript)中未引用的附加变量?

转载 作者:行者123 更新时间:2023-11-29 10:37:26 25 4
gpt4 key购买 nike

我设置了两个全局变量:

var topList = {
a: {},
b: {},
c: {},
d: {},
e: {}
}

var compare = {
a: {},
b: {},
c: {},
d: {},
e: {}
}

我有一个函数来填充它们中的每一个,然后使用 for 循环来换出 compare 变量中的 a 对象。然后它调用一个函数来比较新的 comparetopList,并返回两者中较好的一个(因此将 topList 设置为二:

function optimize(data){

var rawList = data.slice();

var aList = $.grep(rawList, function(e) { return e.position == "A" });
var bList = $.grep(rawList, function(e) { return e.position == "B" });
var cList = $.grep(rawList, function(e) { return e.position == "C" });
var dList = $.grep(rawList, function(e) { return e.position == "D" });
var eList = $.grep(rawList, function(e) { return e.position == "E" });

topList.a = aList[0];
topList.b = bList[0];
topList.c = cList[0];
topList.d = dList[0];
topList.e = eList[0];

compare = topList;

for (i = 0, len = aList.length; i < len; i++) {
compare.a = aList[i];
topList = best(topList, compare);
}
}

出于某种原因,似乎当行 compare.a = aList[i]; 被执行时,它不仅交换了 a 中的对象 compare 变量,还有 topList 变量中的 a 对象。因此,我总是通过我的“最佳”函数发送两个相同的列表,这使得它毫无用处。

我是新手。任何帮助将不胜感激!

最佳答案

试图简单地解释一下,当你这样做时:

var x = {};

您获取一个空对象并将其分配给 x

如果你这样做:

var y = x;

您正在获取相同的对象并将其分配给y

从那时起,如果你...

y.foo = 'bar';

你会发现...

alert(x.foo); // bar (!)

这称为按引用赋值,这就是 JavaScript 中对象的情况(请注意,数组也是对象,具有预定义的方法)。

相反的是按值赋值,将值复制到新变量。

因此,因为您有这种按引用分配,所以您在一处所做的更改会影响另一处。您将需要使用复制函数来获取与第一个对象无关但具有相同值的新对象。

关于javascript - 为什么 for 循环修改行(Javascript)中未引用的附加变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34464780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com