0
点赞
收藏
分享

微信扫一扫

js的事件循环

infgrad 2022-02-19 阅读 55

事件循环(EventLoop)

js是一种单线程的语言,事件循环是为了解决js单线程不会阻塞的一种机制。

由三个部分来工作:

  • 调用栈。存放任务,等待着主线程来执行,执行完就弹出,后进先出。
  • 宏任务队列。存放宏任务,遵循先进先出。
  • 微任务队列。存放微任务,遵循先进先出。

工作原理

  • 所有任务会被放在调用栈里等待主线程来执行
  • js分为同步任务和异步任务,同步任务会按顺序进入调用栈等待主线程依次执行,异步任务会等待到其执行时,将注册的回调函数压入任务队列,等待主线程空闲(调用栈被清空)以及此任务满足条件,此任务被读取进入调用栈,然后等待被执行。
  • 每次主线程空闲时,会去检查微任务队列,如果有微任务,则一次将微任务队列里的所有微任务执行完
  • 每次主线程空闲、微任务空闲时,会去检查宏任务队列,先执行一个宏任务,再检查微任务队列是否有微任务,有则一次执行完微任务队列的微任务,没有则执行下一个宏任务,如此反复,直到宏任务队列被清空。
举报

相关推荐

0 条评论