event loop
即事件循环,任务在主线程里不断进栈出栈的过程,是指浏览器或Node
的一种解决javaScript
单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。
同步和异步任务:
异步任务分为微任务和宏任务
微任务:promise.then() ,.then()。
宏任务:setTimeout,setInterval,callback,xhr(发送网络请求)。
同步任务:除去上面的异步任务都是同步任务。
任务的执行顺序:同步任务——微任务——宏任务。(无论同步任务还是异步任务都是在主线程里执行)
执行过程:
1.把同步任务相继加入同步任务队列。
2.把同步任务队列的任务相继加入主线程。
3.待主线程的任务相继执行完毕后,把主线程队列清空。
4.把微任务相继加入微任务队列。
5.把微任务队列的任务相继加入主线程。
6.待主线程的任务相继执行完毕后,把主线程队列清空。
7.把宏任务相继加入宏任务队列。无time的先加入,像网络请求。有time的后加入,像setTimeout(()=>{},time),在他们中time短的先加入。
8.把宏任务队列的任务相继加入主线程。
9.待主线程的任务相继执行完毕后,把主线程队列清空。