事件循环详解
JS事件循环
例子
1 | console.log('script start'); |
可以试一下他的输出顺序。
答案
1 | script start |
在微软的Edge浏览器,和火狐40,Safari 8.0.8中setTimeout
会比promise1
和promise2
先输出,出现这种情况真是奇了TML怪,因为Firefox39和Safari8.0.7一直都是正确的。
原因
想要了解事件循环,需要先了解事件循环是如何处理宏任务,与微任务。
每一个线程有自己的事件循环机制。所以每一个web worker
都是独立执行的,但是在同一个域名的窗口是同用一个事件循环,所以他们才可以同步通信。事件循环顺序执行队列任务。
Nodejs事件循环
Nodejs的事件循环与浏览器的事件循环机制并不相同,Nodejs虽然使用Chrome v8
作为JS解释引擎,但是异步控制的实现是在libuv
库中。
来个栗子
1 | console.log('start') |
未完待续。。。
参考链接
https://jakearchibald.com/2015/tasks-microtasks-queues-and-schedules/
https://mp.weixin.qq.com/s/hE-tK_PbSYkMms8P9b2H7A
https://nodejs.org/zh-cn/docs/guides/event-loop-timers-and-nexttick/