跳到主要内容

谈谈事件循环

八股文上谈​

js是单线程的,一次只能执行一个任务,通过这个事件循环机制,可以处理多个异步任务操作 事件循环是JavaScript的执行机制。同步任务都在主线程上执行,形成一个执行栈。主线程之外,还存在一个任务队列。只要异步任务有了运行结果,就在任务队列之中放置一个事件。一旦执行栈中的所有同步任务执行完毕(即主线程空闲),系统就会读取任务队列,去执行队列中的异步任务,放入执行栈,主线程不断重复,就形成了这个事件循环机制

项目开发层面谈:​

  • 通常会利用这个事件循环机制来处理一些异步的操作,比如Ajax请求,文件读取等。如果这些操作比较耗时,我们可以把它们放在Promise中作为微任务,这样就不会阻塞主线程的执行

vue/react设计层面谈:​

  • vue和react更新UI视图上,是异步更新的,会将UI更新的操作放入事件队列中,能够确保UI更新不会阻塞主线程,主线程空闲的时候,就会去执行事件任务队列
  • vue的nextTick实现原理就是基于事件循环机制的