变量不同步更新

时间:2012-09-19 13:40:19

标签: 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

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

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

alert(now == later); //returns True

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

修改 好的,我应该更好地解释自己。我想要做的是将now变量更新为以后的。之后我想在8小时后再增加。

2 个答案:

答案 0 :(得分:6)

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

now = later;

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

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

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

now = later;
later = new Date(later.getTime());
later.setHours(later.getHours() + 8);

之后,“now”和“later”将不相等,因为您已将其设置为 new Date实例。

答案 1 :(得分:1)

稍后now = later;更改后会反映现在和vise-verse。因为两者都是同一个对象

   var now = new Date();
    var later = new Date();
    later.setHours( later.getHours() + 8 );

    <Wait for somthing>
    now = later; //  now and later have refeerence of same object 
    later.setHours( later.getHours() + 8 );

    alert(now == later); //returns True