事件循环机制
前言:JavaScript是一种单线程的,为了利用好资源和任务分配,JS将任务分为同步任务和异步任务,而事件循环就是规定了执行任务的顺序。
Event Loop
事件循环机制就是按照以下的顺序模式来循环执行JS中的任务事件
顺序如下:
- 同步先执行
- 异步(微任务 > dom渲染 > 宏任务,然后又继续去找有没微任务)
微任务
- promise.then(new promise构造函数是同步)、async/await。
- process.nextTick
- Promise.catch
- resove/reject
- MutationObserver
注意
Promise是异步的,是指他的then()和catch()方法,Promise本身还是同步的,所以遇到Promise还是先执行的Promise同步代码。(同步优先)
宏任务
- setTimeout
- setInterval
- setImmediate
- ajax请求
- dom事件
- script块
总结
- 先执行同步代码,
- 遇到异步宏任务则将异步宏任务放入宏任务队列中,
- 遇到异步微任务则将异步微任务放入微任务队列中,
- 当所有同步代码执行完毕后,再将异步微任务从【队列】中调入【主线程】执行,
- 微任务执行完毕后再将异步宏任务从【队列】中调入【主线程】执行,
一直循环直至所有任务执行完毕。
同步(Promise)>异步(微任务(process.nextTick ,Promises.then,Promise.catch ,resove/reject,MutationObserver) > 宏任务(setTimeout,setInterval,setImmediate))
注意 new Promise()
是同步方法,resolve
才是异步方法。
1 | // 1.程序开头,主线程,先执行,输出'script start' |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AliveSeven's Blog!
评论