首页 > 解决方案 > 为什么不相关的变量会影响另一个变量?时刻.js

问题描述

我有这个代码。start是 30m 之前end。当我再减去 5m 时,它end也会影响:

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

我理解为什么会发生这种情况——因为subtract()方法改变了它被调用的变量。所以我使用了另一个变量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

但是end还是受到影响!为什么?!我怎样才能让我的代码工作......

此处的示例代码笔https://codepen.io/anon/pen/BvXGEW

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

标签: javascriptmomentjs

解决方案


线

let new_time = end;

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

解决方案:

let new_time = moment(end);

它创建另一个时刻对象并将其分配给new_time变量。现在你有 2 个不同的对象。


推荐阅读