首先js是单线程,任务要一个一个顺序执行,所以为了不造成阻塞,就有了 同步任务 跟 异步任务。
什么是Event Loop(事件循环)?以下过程不断重复。
1.任务开始执行,
2.首先判断JS是同步还是异步,同步就进入主线程,异步的进入Event Table并注册回调函数。
3.当满足触发条件后,Event Table会将这个函数移入Event Queue(事件队列)。
4.主线程内的任务执行完毕为空,会去Event Queue查看是否有可执行的异步任务,如果有就推入主线程中。
什么是宏任务?什么是微任务?
macro-task(宏任务):包括整体代码script,setTimeout,setInterval,事件绑定,ajax,回调函数等。
micro-task(微任务):Promise,process.nextTick
宏任务执行完毕会去微任务的事件队列中查看有没有微任务,有就执行所有微任务,执行完毕开始新的宏任务。如果没有就直接开始新的宏任务。