我有这个代码。 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,可以用来解决我的问题,但是我仍然不明白分配一个完全不同的变量如何影响原始变量...
答案 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
,然后再对其进行任何更改。