setInterval,延迟间隔小于定时器代码执行时间时,相当于没有时间间隔?

Night_Emperor 2017-07-16 10:23:55
不理解setInterval ,我想问的是,当时间间隔小于定时器代码执行时间时,代码队列中会一直存在一个定时器代码,等线程中的代码执行完后,就立刻把队列中的代码提出来进行执行,在执行过程中,又会有定时器代码存入队列,如此往复,就好像定时器代码执行完后,紧接着执行下一个定时器代码,没有间隔。

下面是网上的解析:
这里可能会存在两个问题:
1.时间间隔或许会跳过
2.时间间隔可能<定时调用的代码的执行时间

复制代码 代码如下:
function click() {
// code block1...
setInterval(function() {
// process ...
}, 200);
// code block2
}


和上面一样我们假设通过一个click, 触发了setInterval以实现每隔一个时间段执行process代码



比如onclick要300ms执行完, block1代码执行完, 在5ms时执行setInterval, 以此为一个时间点, 在205ms时插入process代码, click代码顺利结束, process代码开始执行(相当于图中的timer code), 然而process代码也执行了一个比较长的时间, 超过了接下来一个插入时间点405ms, 这样代码队列后又插入了一份process代码, process继续执行着, 而且超过了605ms这个插入时间点, 下面问题来, 可能你还会认为代码队列后面又会继续插入一份process代码...真实的情况是,由于代码队列中已经有了一份未执行的process代码, 所以605ms这个插入时间点将会被"无情"的跳过, 因为js引擎只允许有一份未执行的process代码, 说到这里不知道您是不是会豁然开朗呢..
...全文
281 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

87,993

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧