EventLoop(事件循环)
JS引擎一直等待着任务队列中任务的到来,然后加以处理,处理完继续等…循环往复,周而复始,孜孜不倦……
同步任务和异步任务
JS单线程任务被分为同步任务和异步任务,同步任务都在主线程(这里的主线程就是JS引擎线程)上执行,会形成一个执行栈
主线程之外,事件触发线程管理着一个任务队列,只要异步任务有了运行结果,就在任务队列之中放一个事件回调
一旦执行栈中的所有同步任务执行完毕(也就是JS引擎线程空闲了),系统就会读取任务队列,将可运行的异步任务(任务队列中的事件回调,只要任务队列中有事件回调,就说明可以执行)添加到执行栈中,开始执行
任务
任务被分为两种,一种宏任务(MacroTask)也叫Task,一种叫微任务(MicroTask)
MacroTask(宏任务)
script(外层同步代码)、postMessage、setTimeout、setInterval、setImmediate(除IE10浏览器外都不支持)、I/O操作、UI渲染
MicroTask(微任务)
Process.nextTick(Node独有)、Promise、Object.observe(废弃)、MutationObserver
示例
1 | console.log('script start') |
赏
使用支付宝打赏
使用微信打赏
扫描二维码,分享此文章