一. 什么是宏任务微任务?
1.宏任务(由浏览器、node发起) :setTimeout延时调用、setInterval定时调用 Ajax DOM事件、setImmediate(Node环境)、script(整体代码块)
2.微任务(由JS自身发起) :Promise async/await 、 promise.[ then/catch/finally ]、事件队列 process.nextTick(Node环境)
3.微任务比宏任务的执行时间要早
二. 提到宏任务微任务,前提要明白同步与异步是什么?
前端核心语言就是JS,所以对于JS的一些基本知识,是一定要了解清楚的。JS 是单线程执行的语言,也就是在一个时间段内只能做一件事。这就导致后面的任务需要等到前面的任务完成才能执行,如果前面的任务很耗时就会造成后面的任务一直等待。为了解决这个问题JS中出现了同步任务和异步任务。
同步任务:
在主线程上排队执行的任务只有前一个任务执行完毕,才能执行后一个任务,形成一个执行栈。
异步任务:
==异步任务:==不进入主线程,而是进入任务队列,当主线程中的任务执行完毕,就从任务队列中取出任务放进主线程中来进行执行 简言之->主先任务后。
由于主线程不断重复的获得任务、执行任务、再获取再执行,所以者种机制被叫做事件循环(Event Loop)
三、以下举例说明:
一、主线程上宏任务、微任务执行顺序
console.log('---start---');//第一轮主线程
setTimeout(() => {
console.log('setTimeout'); // 将回调代码放入个宏任务队列,第二轮宏任务执行
}, 0);
new Promise((resolve, reject) => {
console.log(