定时器

setTimeout 机制

js 是单线程运行,setTimeout 只是负责准时把事件压入事件循环主任务队列末尾,在下一次事件循环开始时执行,并不是说时间到了就执行,还要等到线程空闲才能被执行,因此会产生误差

校正

无法完全避免,可通过一定办法减少误差

// 记录上次时间
let T0 = new Date();
function loop() {
    //  记录代码执行消耗时间
    let T1 = new Date();
    //  获取下次执行时间间隔
    let t = 1000 - T1 - T0;
    //  赋值给 T0
    T0 = T1;
    setTimeout(loop, t);
}
setTimeout(loop, 1000);
Last Updated:
Contributors: zhangfei