宏任务:
当前调用栈中执行的代码为宏任务;(主代码块,定时器等)
微任务
当前(此次事件循环中)宏任务执行完,在下一个宏任务开始之前需要执行的任务,可以理解为回调事件
运行机制
1,有微则微,无微则宏;
2,在执行栈中执行一个宏任务;
3,在执行过程中,遇到微任务;将微任务添加到微任务队列中;
4,当前宏任务执行完毕,立即执行微任务队列中的任务;
5,当前微任务队列中的任务执行完毕,检查渲染,GUI线程接管渲染;
6,渲染完毕后,js线程接管,开启下一次事件循环,执行下一次宏任务(事件队列中取);
宏任务微任务都有哪些?
1:宏任务:setTimeout,setInterval,I/0,setImmediate,requestAnimationFrame,
2:微任务:nextTick,ajax,async,await,process,promise的.then, .catch, .finally 方法;
process是一个全局对象,是当前node的进程对象;
nextTick是一个异步函数,会在执行栈之后,异步任务之前;