每日前端知识点(三):事件循环机制(宏任务、微任务)

40 阅读2分钟

讲事件循环之前我们要先了解JS单线程,什么是异步任务,什么是同步任务,宏任务微任务包括什么以及他的执行顺序

一、JS单线程

1. 定义

  • 同一时间只能做一件事,比如先添加dom节点,再删除dom节点。

2. 缺点

有些任务是耗时的会阻塞代码执行,不可能等到setTimeout执行完在执行下一步,这个时候就有了同步和异步的概念

二、同步、异步

1、概念

同步代码:立即放入JS引擎(JS主线程)执行,并原地等待结果

异步代码:先放入宿主环境(浏览器/Node),不必原地等待结果,并不阻塞主线程继续往下执行,异步结果在将来执行。 异步代码有一个共同点:耗时

2、执行过程

执行的过程中先把异步任务交给宿主环境,时机到了之后会推送到任务队列里面去,执行栈先把同步任务执行完,再去取任务队列里的异步任务

执行栈到任务队列里面反复查找的过程就叫做 事件循环

三、事件循环

  1. JS是单线程,防止代码阻塞,我们把代码(任务):同步和异步
  2. 同步代码给js引擎执行异步代码交给宿主环境
  3. 同步代码放入执行栈中,异步代码等待时机成熟送入任务队列排队
  4. 执行栈执行完毕,会去任务队列看是否有异步任务,有就送到执行栈执行,反复循环查看执行,这个过程是事件循环(eventloop)

四、宏任务、微任务

1、执行过程

2、执行顺序

3、代码举例

console.log(1)
setTimeout(function () {
  console.log(2)
},0)

const p = new Promise((resolve, reject) => {
  console.log(3)
  resole(1000)//标记为成功
  console.log(4)
})

p.then(data =>{
  console.log(data)
})

console.log(5)

执行图如下:

打印结果:1=>3=>4=>5=>1000=>2

五、事件循环机制练习网站推荐

www.jsv9000.app/