我在这里得到了这个代码:
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控制台中执行的代码和结果截图: