JavaScript中的异步

本文主要介绍了JS的执行机制,包括从前到后逐行执行,先同步后异步。阐述了宏任务(如setTimeout、Ajax等)和微任务(如Promise、Async等)的概念,微任务执行时机早于宏任务。还讲解了event loop过程、promise状态及async/await与Promise的关系,以及JS执行和DOM渲染的关联。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS如何执行?

  • 从前到后,一行一行执行
  • 如果某一行执行报错,则停止下面代码的执行
  • 先把同步代码执行完,再执行异步

宏任务与微任务

在这里插入图片描述

event loop 浏览器

在这里插入图片描述

总结event loop过程

  • 同步代码,一行一行的放在Call Stack执行
  • 遇到异步,会先‘记录’下,等待时机(定时,网络请求等)
  • 时机到了,就移动到Callback Queue
  • 如果Call Stack为空(即同步代码执行完)Event Loop开始工作
  • 轮询查找Callback Queue,如有则移动到Call Stack执行
  • 然后继续轮询查找(永动机一样)

promise

  • 三种状态,状态的表现和变化
    • promise有三种状态:fulfilled(已成功)/pending(进行中)/rejected(已拒绝) 。pending就是未决,fulfilled可以理解为成功,rejected可以理解为失败。
  • then和catch对状态的影响(重要)
    • then正常返回 resolved,里面有报错则返回 rejected
    • catch正常返回 resolved,里面有报错则返回 rejected
  • then和catch的链式调用(常考)

async/await和Promise的关系

  • 执行async函数,返回的是Promise对象
  • await相当于Promise的then
  • try…catch可捕获异常,代替了Promise的catch

宏任务与微任务

  • 宏任务:setTimeout,setInterval,Ajax,Dom
  • 微任务:Promise,Async,Await
  • 微任务执行时机比宏任务要早

微任务为什么比宏任务先执行

  • 宏任务:DOM渲染后触发,如setTimeout,宏任务是有浏览器规定的。
  • 微任务:DOM渲染前触发,如Promise,微任务是ECMAScript 规定的。

event loop和DOM渲染

  • 再次回归一边event loop的过程
  • JS是单线程的,而且和DOM渲染共用一个线程
  • JS执行的时候,得留一些时机供DOM渲染
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值