https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2017/11/21/15fdd88994142347~tplv-t2oaga2asx-watermark.awebp
js任务分为同步任务,异步任务。当两种任务一同进入执行栈时,两种任务会进入不同的环境,同步任务会进入主线程,异步任务会进入Event Table并注册回调函数,当异步任务有返回结果时,js会把当前的异步任务放入事件队列。等主线程执行完同步任务闲置后,会去事件队列查找是否有异步任务,如果有就会将排在第一位的任务放入主线程执行,然后异步又注册回调,主线程继续执行同步代码,然后又会开始检索事件队列,由此形成一个循环,就是事件循环。
异步任务分为宏任务(macro task),微任务(micro task)
宏任务优先级低于微任务,宏任务会等待微任务队列清空后才会执行,宏任务主要有
微任务优先级高,会先与宏任务执行。主要有
┌───────────────────────┐
┌─>│ timers │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
│ │ I/O callbacks │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
│ │ idle, prepare │
│ └──────────┬────────────┘ ┌───────────────┐
│ ┌──────────┴────────────┐ │ incoming: │
│ │ poll │<──connections─── │
│ └──────────┬────────────┘ │ data, etc. │
│ ┌──────────┴────────────┐ └───────────────┘
│ │ check │
│ └──────────┬────────────┘
│ ┌──────────┴────────────┐
└──┤ close callbacks │
└───────────────────────┘