1、JS是单线程语言,指JS执行环境中负责执行代码的线程只有一个。但是JS的运行环境以及JS的某些API在运行时是可以开启新的线程的。当JS代码的执行栈中进行某些耗时任务时,会将这些耗时任务放到WebApi中,等到可以执行的时候就会进入到消息队列。当执行栈空了的时候,EventLoop会调用消息队列中的第一个任务放到执行栈中执行。
2、JS执行栈中的任务称为宏仁务,
宏任务执行过程中可以临时加上一些额外需求,可以选择作为一个新的宏任务进到队列中排队(如setTimeout),也可以作为当前任务的【微任务】,直接在当前任务结束后立即执行。
微任务的目的是为了提高整体的响应能力,目前绝大多数异步调用都是作为宏任务执行,Promise 、MutationObserver、process.nextTick 是作为微任务在本轮调用的末尾执行。