为什么无关变量会影响另一个变量? moment.js

时间:2019-01-20 11:33:05

标签: javascript momentjs

我有这个代码。 input := []string{"bar", "world"} //expected output bson.A{"bar", "world"} start之前30m。 当我再减去5m时,它也会影响end

end

我了解为什么会发生这种情况-因为subtract()方法会对调用它的变量进行突变。因此,我使用了另一个变量let start = moment().subtract(30,"m"); let end = moment(); console.log(start); // 11:00 console.log(end); // 11:30 start = end.subtract(35,"m"); console.log(start); // 10:55 console.log(end); // 10:55 来尝试阻止new_time受到影响:

end

但是let start = moment().subtract(30,"m"); let end = moment(); console.log(start); // 11:00 console.log(end); // 11:30 let new_time = end; start = new_time.subtract(35,"m"); console.log(start); // 10:55 console.log(end); // 10:55 仍然受到影响!为什么?!如何使我的代码正常工作...

示例密码笔在这里https://codepen.io/anon/pen/BvXGEW

编辑:我刚刚读了moment cloning,可以用来解决我的问题,但是我仍然不明白分配一个完全不同的变量如何影响原始变量...

2 个答案:

答案 0 :(得分:3)

let new_time = end;

end对象的引用复制到new_time。因此,两个变量都引用相同的对象。只有一个对象和两个引用它的变量。

解决方案:

let new_time = moment(end);

会创建另一个矩对象,并将其分配给new_time变量。现在,您有2个不同的对象。

答案 1 :(得分:1)

诸如subtract之类的方法不作用于变量,而是作用于对象。变量就是在那里引用/访问那些存在于内存中的对象。

写入new_time = end只是意味着end现在也可以访问new_time访问的对象。 因此,在查看end时,对new_time引用的对象所做的任何更改都同样可见。

如果您希望它们独立,那么实际上应该克隆end,然后再对其进行任何更改。