setTimeout和setInterval的执行会延时吗

setInterval的回调函数不是定时执行
我们都知道js是单线程机制,异步也是伪异步
所谓异步调用的原理其实是将代码插入到代码执行队列中实现(代码的延迟执行)
代码插入点前的代码执行时间超过了传入setTimeout或setInterval的设定时间会怎样呢?
这样肯定会导致第一次的setTimeout或setInterval不能按时执行
而下一次触发时间则是在setInterval回调函数执行完毕之后
假设setInterval内的计算十分耗时,将会导致计数更加不准

如何解决定时器不准确
可以通过计算时差来解决这个问题

var startTime = new Date().getTime();//获取开始时间
var count = 0;
setInterval(function(){
    var i = 0;
    while(i++ < 100000000);
}, 0);
function fixed() {
    count++;
    var offset = new Date().getTime() - (startTime + count * 1000);//当前时间与准确时间差距
    var nextTime = 1000 - offset;//下次触发的时间
    if (nextTime < 0) nextTime = 0;
    setTimeout(fixed, nextTime);
    console.log(new Date().getTime() - (startTime + count * 1000));//查看时间
}
setTimeout(fixed, 1000);
全部评论

相关推荐

从24年初开学开始接触到前端,和实验室几个同学一起学习,可似乎我总比他们慢一步,每每学完一个地方,我掌握的程度好像都不比他们,第一次实验室的任务实战,我两眼一抹黑,完全不知道从何下手,而他们却是游刃有余,可我当时没有丧气,只有一个念头,既然学习能力不如他们,那我就拿更多的时间去学,于是我把打游戏,运动锻炼的时间也拿来学习。到了暑假,实验室一起做项目,为了可以更好的参与进去,于是我暑假开始留校和同学师哥一起做项目,每天早上九点多去实验室,晚上十点多回宿舍,校田径队的训练没有去,中间也只回家待了一周。到暑假结束开学之后,一位很优秀的师哥拿到了几个offer,我从他身上看到了希望,双非本科就业的希望...
offer求求哩:我的评价是认知低,建议多看书,认知低的一个表现是人生仿佛没考上大学就是进厂,考上了就是考研考公找工作。股市里有一个很有意思的故事,说的是当门口大妈都在谈论股票的时候,说明行情已经见顶了。当你的父母在某些事上没有成功却支持你说明事情可能已经不可靠了,但在某些事上反对你,说明这件事可能还有成功的可能。(仅个人观点)😆😆
点赞 评论 收藏
分享
码农烧烤880:我靠2022了都去字节了还什么读研我教你****:你好,本人985电子科大在读研一,本科西南大学(211)我在字节跳动实习过。对您的岗位很感兴趣,希望获得一次投递机会。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务