什么是宏任务和微任务、说说你对event Loop的理解?

在Javascript中,宏任务(macro-task)和微任务(micro-task)是异步代码执行的两种方式。当浏览器遇到异步代码时,它会将其添加到任务队列中,并等待一段时间后再执行。这里的‘一段时间’就是发生事件后的延迟时间。

  • 宏任务:宏任务包括整体代码script,setTimeout,setInterval,setImmediate(IE浏览器下才有),I/O操作,UI渲染等
  • 微任务:promise、process.nextTick(Node.js环境下)、Object.observe等。他们的响应速度较快,而且一般都是当前任务的异步操作结果。
    而事件循环(event loop)是JavaScript中的一种机制,用来负责处理程序中的事件轮询。它的工作机制如下:
  • 在执行完当前栈中所有同步代码后,从宏任务队列中取出第一个任务并执行该任务。
  • 当该任务完成后,如果其产生了其他任务(比如通过setTimeout等异步方法注册的宏任务、也有可能产生微任务 ),将会把这些任务加入到相应的任务队列中等待执行。
  • 接着按照先入先出的原则,从微任务队列中取出所有任务按顺序执行完
  • 若此期间微任务中又产生了新的微任务,则继续执行微任务,知道没有微任务为止。
  • 微任务队列为空后,开始下一个宏任务;重复上述过程,直至程序结束
    需要注意的是:“先进先出”的方式只针对当前的一个宏任务(一次循环),而不是跨越多个宏任务。例如,如果执行完当前的宏任务后,又产生了新的宏任务和微任务,那么这些新产生的任务会在下次循环中依次被执行。

总体来说,事件循环机制保证了 Javascript 的单线程特性,同时也保证了异步代码的渐进式执行,避免了阻塞程序运行的问题。通过掌握宏任务、微任务和事件循环的机制,我们可以更好地理解Javascript异步编程的本质,并写出更高效、可维护的代码。

猜你喜欢

转载自blog.csdn.net/m0_68009075/article/details/131107942
今日推荐