js分为同步任务和异步任务,异步任务分为微任务和宏任务。 第一步、同步任务直接放到主线程(js引擎)的执行栈中执行(先进后出) 第二步、微任务进入js引擎,宏任务进入宿主环境(浏览器、node..)。在合适的时机,微任务的回调函数进入微任务队列,宏任务的回调函数进入宏任务队列 第三步、主线程的同步任务执行完毕后,先看微任务队列有没有回调函数(先进先出),执行完微任务队列中的回调函数后,看看宏任务队列有没有回调函数(先进先出),执行宏任务队列中的回调函数。 附:eventloop:执行栈执行完毕,会去任务栈看是否有异步任务,有就送到执行栈执行,反复循环查看执行,这个过程是事件循环(eventloop)。 微任务:promise(promise本身同步,then/catch的回调函数是微任务)、process.nextTick(node):面试装逼用、Async/Await、Obiect.observe等
宏任务:script代码块、网络请求(i/o)、定时器、事件