1.js事件循环机制
// 什么是事件循环机制?
由于js是单线程语言,如果前面一个任务执行时间过长,后面的任务就只能等待, 就会出现阻塞。为了解决这个问题,js引入了事件循环机制。因此,当遇到需要等待的操作时,js会将其放到事件队列中,等待主线程执行完毕后,再依次执行任务队列中的事件。这个过程会不断重复,形成一个循环。
// 事件执行顺序为,同步任务>异步任务(微任务>宏任务),异步任务又分为宏任务和微任务
// 宏任务包括:setTimeout,setInterval,setImmediate,I/O,UI rendering
// 微任务包括:Promise.then,process.nextTick,MutationObserver
1、所以这题先:console.log("4"),输出4
2、 setTimeout(function () {
console.log("5");
},0);是异步任务而且是宏任务,先把他放到宏任务队列里面
3、 async1()里面的 console.log("1"),输出1,
4、然后执行await async2(),await后面的console.log("2");会发生阻塞,放到微任务里面等待同步代码执行完毕后再执行,所以输出3,
5、 然后执行promise,输出6,.then后面的console.log("7");是异步微任务,所以把他放入到微任务队列中
6、然后执行console.log("8"),输出8,
所以最后最后输出结果为:同步任务:4,1 ,3,6,8,异步微任务 : 2, 7 异步宏任务: 5