变量不同步更新

kim*_*sen 0 javascript

我一直遇到这个问题.而现在它与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
Run Code Online (Sandbox Code Playgroud)

我认为这可以使用回调来解决:

var adjustTime = function(callback){
     now = later;
     callback();
}
adjustTime(function(){
    later.setHours( later.getHours() + 8 );
});

alert(now == later); //returns True
Run Code Online (Sandbox Code Playgroud)

我不明白什么?如何正确更新这些变量?

编辑: 好的,我应该更好地解释自己.我想要做的是将now变量更新为稍后的.之后我想稍后再增加8小时.

Poi*_*nty 6

Date实例之间的等式比较仅测试对象引用相等性.无论如何,一旦你完成了这个:

now = later;
Run Code Online (Sandbox Code Playgroud)

然后变量"now"和"later"引用相同的对象.因此,"以后"的更新是"现在"的更新.

Date原型上的"setter"方法都直接修改对象.也就是说,Date实例不是不可变的.

编辑 - 我猜你真正想要的是保持"现在"和"稍后"分开.在这种情况下,这样的事情可能是你想要的:

now = later;
later = new Date(later.getTime());
later.setHours(later.getHours() + 8);
Run Code Online (Sandbox Code Playgroud)

之后,"now"和"later"将不相等,因为您已将其设置为 Date实例.