【JavaScript】事件循环Event Loop

101 阅读2分钟

事件循环总是记不清,通过几个问题来记录下学习。

什么是单线程?

单线程就是在程序执行时,所走的程序路径按照代码先后顺序排下来,只有前面的必须处理好,后面的才会执行。

什么是同步任务,什么是异步任务?

同步任务

叫做非耗时任务,指的是在主线程上排队执行的那些任务。

异步任务

叫做耗时任务,异步任务由JavaScript委托给宿主环境进行执行,当异步任务执行完成后,会通知JavaScript主线程执行异步任务的回调函数。

JavaScript既然是单线程语言,为何可以实现异步?

JavaScript确实是单线程语言,但是宿主环境不是,当出现异步任务时,JavaScript将其委托给宿主环境(如浏览器)进行执行,执行完成后,通知JavaScript 主线程执行异步任务的回调函数,将回调函数压入异步任务队列中,等待主线程中的任务全部清空了,再被召唤执行。

异步任务分为哪几类?

JavaScript的异步任务又被分为宏任务微任务。常见的宏任务如setTimeout和setInterval两个定时器。常见的微任务如Promise.then()。JavaScript会将这些异步任务分为宏任务和微任务两个新的队列。宏任务和微任务的执行顺序是不同的,同为异步任务,微任务的优先级更高。任务队列按照先进先出的顺序。

事件循环是什么?

事件循环即异步任务的执行机制。执行顺序如下。

  1. 同步任务全部执行完毕,查看微任务的任务队列。
  2. 执行完所有微任务之后,查看宏任务的任务队列。
  3. 取一项宏任务执行,执行完毕后查看微任务的任务队列。
  4. 重复2和3。

以上23的重复过程就叫事件循环。