假设有以下场景
注册延迟执行计时器, 延迟 10ms.
延迟执行回调函数需要执行 6ms.
接着注册一个间隔执行计时器, 每隔 10ms 执行一次.
间隔执行回调函数需要执行 8ms.
继续注册一个单击事件处理器, 需要执行 10ms.
本例中的代码块需要运行 18ms.
现在, 假设某毫无耐心的用户在程序执行 6ms 时快速单击按钮.
执行情况:
1,[0ms] 执行主线程
2,[6ms] 添加点击事件到队列中
3,[10ms] 两个计时器按照注册顺序加入宏任务队列
4,[18ms] 单击和两个计时器等待触发, 单击开始执行
5,[20ms] 间隔计时器又一次触发, 但是已经有该实例. 触发被终止.
6,[28ms] 单击事件执行完毕, 执行延迟计时器任务.
7,[30ms] 间隔计时器又一次触发, 但是已经有该实例. 触发被终止.
8,[34ms] 延迟计时器执行完毕, 执行间隔计时器任务.
9,[40ms] 间隔计时器又一次触发, 间隔处理器正在执行, 所以这次可以添加到任务队列.
10,[42ms] 间隔计时器执行完毕, 执行刚刚添加的间隔计时器.
11,[50ms] 间隔计时器执行完毕. 间隔计时器又一次触发. 添加到任务队列, 此后 10,11 反复执行.
来源: http://www.bubuko.com/infodetail-3035698.html