事件轮询
常见的宏任务:script整体代码,setTimeout,setInterval,I/O等,
常见的微任务:Promise.then();
轮询:轮流询问宏任务和微任务;
先轮询宏任务中的script整体代码放到调用栈中执行,遇到同步代码直接执行,异步代码交给WEB API处理,WEB API会根据代码内容分类到宏任务队列或微任务队列,执行完成后,清空当前微任务队列;再轮询下一个宏任务。每轮询完一个宏任务就清空一次微任务队列。
在上述描述中,各角色的作用:
WEB API:提供异步机制,安排任务去哪个队列待命。
宏任务队列:接收WEB API安排来的宏任务,按序排好先进先出的执行机制;
微任务队列:接收WEB API安排来的微任务,按序排好先进先出的执行机制;
调用栈:代码在这执行;先进后出;
图解: