学习过程是这样的,找到一篇阮一峰的Event Loop的文章,结合自己以前看过的《JS高设》里面的介绍 又一次整体学习了事件队列
但是,又找到这篇
【朴灵评注】JavaScript 运行机制详解:再谈Event Loop
再经过2次阅读之后,我发现,当时朴灵对阮一峰的指正只是说出了错在哪里,而没有找到他对整个知识点的解释(结尾有但是比较模糊)
所以我把综合2篇文章的学习总结为: 阮一峰文章传达的概念正确,但(可能)事实上这种抽象概念并不是用他解释的话去实现的。
下面是我简要总结一下事件队列的要点:
事件队列分3个模块:
- DOM Binding 包括涉及DOM操作的一些callback函数
- network 异步的callback函数
- timer 包括seTimeout等计时函数
JS代码执行时候,分为 主线程(栈) 和 任务队列(队列),上述第1点的(1)(2)(3)属于任务队列
- 所有同步任务在主线程中执行
- 异步任务(我理解为需要调用callback函数时)有了结果就放去任务队列
- 主线程的任务栈执行完后,就是调用任务队列,检查是否有新任务
- 主线程不断循环上面三步
其中在timer模块中,seTimeout的定义是这样的:
- 延时小的执行优先级高
- 延时相同的函数优先级按注册顺序
- 当设定延时为0时,也会被丢入事件队列中,等主线程的栈事件执行完再调用