当前位置: 首页 > news >正文

js中异步回调函数的执行机制与事件循环

先理解几个核心概念

1、调用栈:同步代码会按照顺序进入调用栈执行

2、任务队列:所有异步回调函数,(包括setTimeOut,DOM,Promise等)都会被放入任务队列等待执行

3、事件循环:他的工作就是不断检查调用栈是否为空,如果为空,就会从任务队列中取出第一个任务放到调用栈中执行

举个例子:

setTimeOut的延迟事件是1s,但是同步代码的执行需要2s,此时1s后调用栈仍然不为空,定时器的回调函数 fn 会一直在任务队列中等待,只有调用栈完全清空,事件循环才会将任务队列中的回调函数fn放入调用栈执行

console.log('开始');// 同步代码,需要2秒执行
const start = Date.now();
while (Date.now() - start < 2000) {// 模拟耗时操作
}// 异步代码,设置1秒后执行
setTimeout(() => {console.log('setTimeout执行');
}, 1000);console.log('结束');

执行顺序是:

  1. 立即打印 "开始"
  2. 执行 2 秒的同步循环
  3. 打印 "结束"
  4. 此时调用栈为空,事件循环发现任务队列中有 setTimeout 回调
  5. 执行回调,打印 "setTimeout 执行"

虽然 setTimeout 指定了 1 秒后执行,但实际上它会在 2 秒多后才执行,因为需要等待前面的同步代码完成。

http://www.dtcms.com/a/435518.html

相关文章:

  • 创造与魔法官方网站做自己喜欢的事购物商城起名
  • 自己搞网站建设企业网站更新什么内容
  • 解决一个C# 在Framework 4.5反序列化的问题
  • 营销导向网站建设流程电脑配件网站建设
  • 网站搭建素材群会计培训班的费用是多少
  • 建设银行短信带网站江苏省住房和城乡建设厅网站首页
  • 哪个网站最好wordpress找回密码收不到邮件
  • 哈希表(散列表)介绍及实现
  • 一个专门做ppt的网站吗注册域名需要实名认证吗
  • 做网站外包工作怎么样visual composer for wordpress
  • 平面设计鉴赏网站关于加强网站建设
  • Spring Boot 热部署配置
  • 成都网站设计公司南宁seo按天收费
  • 自适应微网站开发专业集团门户网站建设企业
  • PCIe协议之低功耗篇之 理论深度学习(三)
  • 广州帮人网站建设广州网站建设需要多少费用
  • 在县城怎么做网站公司网络域名侵权十大案例
  • 佛山专业做淘宝网站推广住房与城乡建设局网站
  • 康复实训室介绍:告别“假人”模型,在沉浸式环境中锻造康复精英的黄埔军校
  • C语言小白实现多功能计算器的艰难历程
  • 【C++实战(62)】从0到1:C++打造TCP网络通信实战指南
  • 企业网站建设杭州公司宠物寄养网站毕业设计
  • 同ip怎么做不同的网站网站设计需要什么技术
  • 邢台做wap网站的公司做旅行路线的网站
  • 港口备案怎么在网站做培训心得简短
  • 菏泽市住房和建设局网站专业建站公司电话咨询
  • 网站关键词几个字网站建设策划书范文提纲
  • Java 大视界 -- Java 大数据在智能安防周界防范系统中的行为分析与预警精度提升(419)
  • 北京金港建设股份有限公司网站wordpress怎么迁移到空间
  • 查工作单位的网站长沙网站建设公司有哪些