Event Loop

2022-03-09  本文已影响0人  小码农_影

js是单线程,单线程中又分为同步任务,异步任务。
同步任务:在主线程上执行,前面任务没有执行完毕,后面的任务将一直等待执行。
异步任务:则是放在任务队列中,等待主线程所有任务执行完成后,通知任务队列把可执行的任务放到主线程上执行。异步任务放到主线程执行完成后,又通知任务队列把下一个任务放到主线程中执行。这个过程一直持续,直到所有的异步任务执行完毕,这个持续重复的过程就称为event loop,而一次循环就是一次tick。
异步任务又分为宏任务、微任务。
宏任务(macrotask):script代码、setTimeout、 setInterval等。
微任务(microtask):Promise, process.nextTick, Object.observe, MutationObserver。

执行过程:先执行宏任务,再执行微任务。
微任务是一次循环中,一直取一直取,直到所有的微任务队列全部执行完。宏任务,则是循环一次取一次。
如果在事件循环的过程中,又加了macrotask,则是将macrotask放到队尾,等到下一次循环,再执行,如果是microtask,则是放在本次循环的microtask队列的队尾,直到microtask队列清空。

console.log(1);
setTimeout(function () {
  console.log(2)
}, 0); 
new Promise(function (resolve) {
  console.log(3)    
  for (var i = 100; i > 0; i--) {
    i == 1 && resolve()
  }
  console.log(4)
}).then(function () {
  console.log(5)
}).then(function () {
  console.log(6)
});
console.log(7);
上一篇 下一篇

猜你喜欢

热点阅读