【JS进阶】JS的事件循环机制

JS事件循环与任务队列详解
JavaScript采用单线程和同步、异步执行模式来处理任务。同步任务按顺序执行,异步任务分为宏任务和微任务,放入任务队列。事件循环(EventLoop)机制确保先执行同步任务,然后处理微任务,接着执行一个宏任务,如此反复。Promise的then和catch属于微任务,而newPromise是同步任务。

JS事件循环机制

1.JS的运行机制

JavaScript是一门单线程语言,单线程意味着在一个时间点内只能做一件事,因此JS引擎就会有多余的时间,所以为了解决单线程所造成的这个问题,提出了同步异步的执行模式。

1.1 同步(阻塞)

同步执行模式就是JS会严格按照原本单线程逻辑,从上到下,从左到右的执行代码逻辑。

1.2 异步(非阻塞)

在执行JS代码时先逐步执行同步代码,遇到异步代码先将异步代码放到任务队列中,直到同步代码执行完毕才执行异步代码。

2.同步任务与异步任务

2.1 同步任务

指在主线程上排队执行的任务,只有前一个任务执行完毕,才能继续执行下一个任务。

2.2 异步任务

指不进入主线程、而进入**“任务队列”**的任务,只有等主线程任务全部执行完毕,"任务队列"的任务才会进入主线程执行。

异步任务又可以分为宏任务微任务

如下表:
在这里插入图片描述
同时,需要注意的是:

这里的 Promise 是指 Promise 的thencatch方法,而创建 Promise(new Promise()中的内容),console.log()均为同步任务。

3.任务执行过程

在这里插入图片描述
所以实际上的执行顺序为:同步任务 → 微任务 → 宏任务

具体来说,有以下几个步骤:

  1. 先执行所有同步任务,碰到异步任务放到任务队列中
  2. 同步任务执行完毕,开始执行当前所有的异步任务
  3. 先执行任务队列里面所有的微任务
  4. 然后执行一个宏任务
  5. 然后再执行所有的微任务
  6. 再执行一个宏任务,再执行所有的微任务·······依次类推到执行结束。

在这一过程中,第三步到第六步的这个循环,被称为 Event Loop,即事件循环

事件循环是JavaScript实现异步的一种方法,也是JavaScript的执行机制。

总结

事件循环主要是针对解决宏任务一次事件循环只能处理一个宏任务,执行宏任务的时候会进行一次轮询,看有没有微任务,如果有微任务将会把微任务执行全部执行完毕,在执行宏任务。

补充1:async/await 的特殊情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值