作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我设置了两个全局变量:
var topList = {
a: {},
b: {},
c: {},
d: {},
e: {}
}
var compare = {
a: {},
b: {},
c: {},
d: {},
e: {}
}
我有一个函数来填充它们中的每一个,然后使用 for 循环来换出 compare
变量中的 a
对象。然后它调用一个函数来比较新的 compare
和 topList
,并返回两者中较好的一个(因此将 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/
我是一名优秀的程序员,十分优秀!