Js是一门单线程语言,eventloop是浏览器或node.js解决单线程问题的一种执行机制,也就是同步任务和异步任务的
原理。
1. 同步任务
代码的执行顺序与书写顺序一致;在主线程上排队执行的任务,一个一个向下执行,如果在某一个为位置执行被终端,那么后续都不会执行(最常见的情况就是报错)
2.异步任务
异步任务指的是,不进入主线程、而进入“任务队列”,只有等任务队列通知主线程某个任务可以执行,这个任务才会被加载到主线程,开始执行。
异步任务又分宏任务与微任务
宏任务:Promise.then/catch/finally
,queueMicrotask
等
实例:微任务:setTimeout
,setInterval
等
执行步骤
- 当主线程任务执行完后,看任务队列是否有待执行的微任务
- 如果有会把所有待执行的微任务放到任务队列
- 如果没有微任务或微任务执行完后,
- 再看任务队列是否有待执行的宏任务
- 如果有就放到主线程开始执行
- 微任务执行后再看有没有宏任务,有就先执行所有宏任务
- 如果没有就下个微任务