关于 setTimeout 延时执行时机不准确的问题

来源:-

haisheng_lin

2019-01-02 18:35

老师,我对 `setTimeout` 的执行时机不精确的原因理解,不知道正不正确:

1. 浏览器执行 JS 是基于事件循环的,我假设每执行一次 tick 的间隔是 17ms,我定义了一个延时函数在 18 ms 后进行。假设第一个 tick 瞬间完成,那么完成瞬间的时间戳是 0,等待 17ms 后执行第二次 tick,此时发现那个延时函数还没到时,所以不执行,于是等下一次 tick 也就是 34 ms 时才执行,所以导致时机不准确。

2. 每一次 tick 执行的时间不固定。就基于刚说的第一点,延时函数在第三个 tick 进行,但是由于是异步的,所以在同步代码执行完才执行,假设第三次 tick 的同步代码执行时间较长,于是这个函数的执行时机又延长了。

那这,`setTimeout` 真正执行的时机只会往后不会往前。不知道我说的对不对,请老师更正或补充一下。

写回答 关注

1回答

  • 工具分子
    2019-05-20 13:38:37

    setTimeout执行不精确,就JS讲的话,就是异步机制的问题,它是到了那个时间将异步任务添加到执行队列里面去,不代表到了那个时间就执行异步任务。和这个项目本身没什么关系。

原生 JS 实现帧动画库

了解如何用原生JS实现酷炫的帧动画,吸引他她的注意

47184 学习 · 92 问题

查看课程

相似问题