我有这段代码:
var date = new Date();
setTimeout(function(e) {
var currentDate = new Date();
if(currentDate - date >= 1000) {
console.log(currentDate, date);
console.log(currentDate-date);
}
else {
console.log("It was less than a second!");
console.log(currentDate-date);
}
}, 1000);
在我的电脑上,代码总是能正确执行,控制台输出1000。有趣的是,在其他电脑上,同样的代码会在不到一秒钟内启动超时回调,并且currentDate - date
之间的差异在980和998之间。
我知道存在解决此精度问题的库(例如Tock)。
基本上,我的问题是:setTimeout
为什么不能按照给定的延迟触发?这可能是因为电脑太慢,浏览器自动尝试适应缓慢并在事件之前触发吗?
PS:以下是在Chrome JavaScript控制台中执行的代码和结果的截图:
31.0.1650.63 m
上重现_少于指定持续时间_的问题。然而,在34.0.1782.2 canary
和我尝试过的其他所有浏览器中,我都收到了>= 1000
(如预期)。 - canon