我一直遇到这个问题。现在它与 Date
对象有关
var now = new Date();
var later = new Date();
later.setHours( later.getHours() + 8 );
<Wait for somthing>
now = later;
later.setHours( later.getHours() + 8 );
alert(now == later); //returns True
我认为这可以使用回调来解决:
var adjustTime = function(callback){
now = later;
callback();
}
adjustTime(function(){
later.setHours( later.getHours() + 8 );
});
alert(now == later); //returns True
我不明白什么?如何正确更新这些变量?
编辑: 好吧,我应该更好地解释一下自己。我想要做的是将 now 变量更新为稍后的值。之后我想增加 8 小时。
最佳答案
Date
实例之间的相等性比较仅测试对象引用相等性。无论如何,完成此操作后:
now = later;
那么变量“now”和“later”引用同一个对象。因此,对“稍后”的更新就是对“现在”的更新。
Date
原型(prototype)上的“setter”方法都直接修改对象。也就是说,Date
实例不是不可变的。
编辑 - 我猜你真正想要的是将“现在”和“以后”分开。在这种情况下,您可能想要这样的东西:
now = later;
later = new Date(later.getTime());
later.setHours(later.getHours() + 8);
之后,“现在”和“稍后”将不相等,因为您将其设置为新 Date
实例。
关于javascript - 变量不同步更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12495974/