Event Loop事件循环

js事件循环

1、js主线程事件处理脚本

当js执行一个脚本时,会先从上到下解析脚本内的代码,如果这个任务是一个同步任务,js引擎会将任务放入执行栈中就地执行,如果这个任务是一个异步任务,js引擎会将这个任务挂起并放入js运行环境去执行,继续向下寻找同步任务。

2、js运行环境处理异步任务

js运行环境会接收脚本传输过来的异步任务并执行,执行完毕后会将事件返回的结果分为两种放入任务队列中,这两种任务就是宏任务与微任务,js运行环境会将它们分别放入宏任务队列与微任务队列中等待js主线程执行。

3、js主线程解析任务队列

当所有同步任务执行完毕后,js将在任务队列中的代码放入执行栈执行,js会优先读取微任务队列中的任务,当微任务队列执行完毕后,js才会读取宏任务队列中的任务。如果在这个宏任务中还有微任务,主线程会将这个任务放入微任务队列中等待执行,当宏任务执行完毕后,主线程会先查询微任务队列中是否还有微任务需要执行,如果有就先执行微任务,开始循环。

小结:如果宏任务队列与微任务队列同时存在任务将会优先执行微任务

查看源图像

 同步任务:

  • console.log('')
  • new Promise

异步任务:

  • setTimeout、setInterval 定时器 
  • XMLHttpRequest   
  • async function

微任务:

  • process.nextTick
  • Promise.then catch finally
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值