首先,JS是单线程的,为了防止代码堵塞,我们把代码分为同步代码和异步代码。同步代码给JS引擎执行,异步代码交给宿主环境;同步代码放入执行栈中,异步代码等待时机成熟送入任务队列排队,执行栈执行完毕,会去任务队列查看是否有异步任务,有就送到执行栈执行,反复循环查看执行,这个过程就是事件循环(eventloop)。JS把异步任务分为宏任务和微任务,首先执行一个宏任务然后执行所有的微任务,执行完再去宏任务队列中选择下一个宏任务执行,这个过程不断循环,直到所有任务被处理完毕。
常见的异步代码:
○宏任务的异步代码:
script代码块
setTImeout/setInterval
用户交互
○微任务的异步代码:
promise的.then/.catch
Async/Await
process.nextTick
object.observe