Javascript 正在将 var 设置为早期
Javascript is setting var to early
我从几天前开始学习 JavaScript 但现在我遇到了一个问题,我想在计算后始终将 var 设置为旧值,如下所示:
var Old = [0,0];
var New = [0,0];
test();
function test() {
Old = New;
New[0] = 0;
New[1] = 5;
alert(Old + " : " + New);
do_some_calculation_stuff();
}
但我不明白为什么旧值和新值总是立即相同以及如何解决这个问题。
因为像这样分配数组意味着只分配引用。如果您想对 New
中的内容进行浅表复制,您需要执行以下操作:
Old = New.slice(0);
以上基本上是执行此操作的缩写形式:
Old = [];
for (var i = 0; i < New.length; ++i) {
Old[i] = New[i]
}
当您将 New
分配给 Old
时,您实际上只是将其分配给数组的引用。那时,两个变量都指向完全相同的对象。如果您通过引用 New
修改数组,当通过 Old
访问时它也会显示为已更改
我从几天前开始学习 JavaScript 但现在我遇到了一个问题,我想在计算后始终将 var 设置为旧值,如下所示:
var Old = [0,0];
var New = [0,0];
test();
function test() {
Old = New;
New[0] = 0;
New[1] = 5;
alert(Old + " : " + New);
do_some_calculation_stuff();
}
但我不明白为什么旧值和新值总是立即相同以及如何解决这个问题。
因为像这样分配数组意味着只分配引用。如果您想对 New
中的内容进行浅表复制,您需要执行以下操作:
Old = New.slice(0);
以上基本上是执行此操作的缩写形式:
Old = [];
for (var i = 0; i < New.length; ++i) {
Old[i] = New[i]
}
当您将 New
分配给 Old
时,您实际上只是将其分配给数组的引用。那时,两个变量都指向完全相同的对象。如果您通过引用 New
修改数组,当通过 Old