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

JS同步与异步概念及区别

同步(Synchronous)

  1. 概念

    • 代码按顺序逐行执行,前一个操作完成后,才能执行下一个操作。
    • 如果遇到耗时操作(如复杂计算、文件读取等),后续代码必须等待当前操作完成。
  2. 特点

    • 阻塞性:同步代码会阻塞主线程,导致后续代码无法立即执行。
    • 简单性:代码顺序直观,易于理解。
  3. 示例

    console.log("Step 1"); // 立即执行
    calculateHeavyTask();  // 假设这是一个耗时同步函数
    console.log("Step 2"); // 必须等待上一步完成
    

异步(Asynchronous)

  1. 概念

    • 代码不等待耗时操作完成,而是先继续执行后续代码。
    • 耗时操作完成后,通过回调函数、Promise等机制通知程序处理结果。
  2. 特点

    • 非阻塞性:主线程不被阻塞,用户界面保持响应。
    • 复杂性:需要处理回调嵌套(如回调地狱),但可通过Promise/async/await优化。
  3. 示例

    console.log("Start");
    setTimeout(() => {
      console.log("Async operation done"); // 延迟后执行
    }, 1000);
    console.log("End"); // 立即执行,无需等待setTimeout
    // 输出顺序:Start → End → Async operation done
    

关键区别

特性同步异步
执行顺序顺序执行,严格阻塞非阻塞,后续代码立即执行
适用场景简单、即时操作I/O操作、网络请求、定时任务
性能影响可能导致界面卡顿提升响应速度和性能
实现方式普通函数调用回调函数、Promise、async/await、事件监听

底层机制:事件循环(Event Loop)

JavaScript通过事件循环管理异步任务:

  1. 调用栈(Call Stack):执行同步代码。
  2. 任务队列(Task Queue):存放异步完成的回调(如setTimeout、DOM事件)。
  3. 微任务队列(Microtask Queue):存放优先级更高的回调(如Promise.then()MutationObserver)。
  4. 执行顺序
    • 同步代码(调用栈)→ 清空微任务队列 → 取出一个宏任务执行 → 重复循环。

总结

  • 同步:代码顺序执行,简单但可能阻塞。
  • 异步:非阻塞执行,适合耗时操作,依赖事件循环管理。
  • 选择依据:根据是否需要等待操作结果(如用户输入、API响应)决定使用同步或异步。

通过合理使用异步(如Promiseasync/await),可以在保持代码可读性的同时,优化性能和用户体验。

相关文章:

  • Redis 通用命令
  • LangChain 由入门到精通
  • FastAPI系列:Ubuntu部署FastAPI项目实战
  • 用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解
  • springboot 如何实现发送短信
  • 什么是 Ribbon?
  • WordPress平台如何接入Deepseek,有效提升网站流量
  • Deepseek引爆AI热潮 防静电地板如何守护数据中心安全
  • 通义灵码在跨领域应用拓展之物联网篇
  • 蓝桥杯第十六届嵌入式模拟编程题解析
  • Android TextView 使用.9图片文字不展示
  • 计算机视觉算法实战——跌倒检测(主页有源码)
  • 【前端】【功能函数】treeMapEach,对每个节点进行自定义转换的实用函数
  • 深入理解 CSS pointer-events: none:穿透点击的魔法
  • 前端兼容处理接口返回的文件流或json数据
  • C++ Primer 容器适配器
  • java基础学习
  • SQL笔记#函数、谓词、CASE表达式
  • JavaScript 中的逻辑运算符
  • 项目实战--网页五子棋(匹配模块)(5)
  • 网站 源文件/怎么创建自己的网站平台
  • 网站用什么图片格式好/网络推广公司是干嘛的
  • 河南网站建设推广公司/百度网站链接提交
  • wordpress reference/南宁网站seo外包
  • 响应式网站建设的应用场景/百度seo怎么提高排名
  • 网站建设需要了解的信息/如何在百度发布文章