前言
今天与同事切磋高级开发技能,同事问到了事件循环机制Event Loop。一时没有回答上来,回家后整理了一下。以此谨记。
概念
Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。
在JavaScript中,任务被分为两种,一种宏任务(MacroTask)也叫Task,一种叫微任务(MicroTask)。
宏任务
宏任务包括 script (整体代码)、setTimeout、setInterval、 setlmmediate、 l/O、 UI rendering
微任务
微任务包括 promise、Qbject observe、Mutation Observer
微任务是跟屁虫,一直跟着当前宏任务后面代码执行到一个微任务就跟上,一个接着一个

实例展示
我们来看以下代码
console.log('script start' );
// 宏任务
setTimeout( function () {
console.log('setTimeout' );
}, 0);
// 微任务跟在当前宏在务屁股后面
Promise. resolve().then(function () {
//微任务跟在当前宏任务配服石面
console.log('promise1');
}).then(function () {
// 微任务跟在当前宏任务屈股后面
console.log('promise2');
});
console.log('script end');
复制代码
在以上代码中第一次洪任务为script (整体代码),所以优先输出script start和script end
在本次宏任务中有两个.then的微任务,所以其次输出promise1和promise2
在第二次事件循环中我们遇到了宏任务setTimeout 所以再输出setTimeout
所以最终输出为

以下我画了张图方便大家更好理解

小练习
以下给大家带来了两个小练习,大家可以手动敲下,深刻的理解其中的原理
题目1

输出为
3 4 8 5 2
题目2

输出为

© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END























![[桜井宁宁]COS和泉纱雾超可爱写真福利集-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/4d3cf227a85d7e79f5d6b4efb6bde3e8.jpg)

![[桜井宁宁] 爆乳奶牛少女cos写真-一一网](https://www.proyy.com/skycj/data/images/2020-12-13/d40483e126fcf567894e89c65eaca655.jpg)