Event Loop
Event Loop即事件循环,是指浏览器或Node的一种解决javaScript单线程运行时不会阻塞的一种机制,也就是我们经常使用异步的原理。
MacroTask/MicroTask
提到浏览器的事件循环就不得不提到宏任务(MacroTask)和微任务(MicroTask)的概念
宏任务的代表: setTimeout/setInterval/setImmediate等
微任务的代表: Promise/MutationObserver 和node里的process.nextTick等
众所周知 js是单线程运行的 那它是如何处理异步逻辑的呢?
Javascript 有一个 main thread 主线程和 call-stack 调用栈(执行栈),所有的任务都会被放到调用栈等待主线程执行
Javascript单线程任务被分为同步任务和异步任务,同步任务会在调用栈中按照顺序等待主线程依次执行,
异步任务会在异步任务有了结果后,将注册的回调函数放入任务队列中等待主线程空闲的时候(调用栈被清空),
被读取到栈内等待主线程的执行
主线程的任务会放在主线程队列
当主线程队列执行完毕后
会去check微任务队列 挨个执行其中的微任务
等到微任务队列没有可执行的任务后 会去check宏任务队列并执行存在的第一条宏任务
执行一条宏任务后 会再次check微任务队列是否存在待执行任务 存在就执行微任务 循环以上操作