ES6 —— 任务队列和事件循环

任务

在JavaScript中,所有任务可以分为两种,一种是同步任务,一种是异步任务

        同步任务:同步任务是在主线程(这个线程用来解释和执行 JavaScript 代码)上排队执行的任务。
        异步任务:不进入主线程、而进入任务队列的任务。只有当主线程上的所有同步任务执行完毕之后,主线程才会读取任务队列,将任务放到执行栈,开始执行任务。(例如:ajax请求、setTimeout等事件调用的回调函数)

任务队列

        当遇到计时器(setTimeout)、DOM事件监听或者是网络请求的任务时,JS引擎会将它们直接交给浏览器提供的相应线程去处理,而JS引擎线程继续后面的其他任务,这样便实现了 异步非阻塞。 当任务在相应的子线程上执行完成之后,再调回到主线程上,由JS引擎继续执行。

        JavaScript中有两类任务(事件)队列:宏任务队列和微任务队列。 

        异步任务的队列优先级: 异步宏任务先执行 然后在执行异步微任务

事件循环

        JS引擎在执行任务时,同步任务和异步任务是在不同的线程上执行的,同步任务在主线程上先执行,异步任务在子线程上执行,在子线程上执行完之后再调回主线程处理。

        先执行第一轮的异步宏任务中的代码,先是同步任务执行,再是异步微任务执行,然后才是下一轮排队的宏任务;而下一轮排队的宏任务执行时,又是先同步任务再微任务,如果有宏任务再让其继续排队,最后再执行下一轮排队的宏任务......之后一直这样循环下去,直到所有任务执行完毕。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z_小张同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值