ES6模块详解:核心语法与最佳实践

以下是 EMAScript 6(ES6)模块规范的核心要点及细节解析:

📦 一、核心语法

  1. 导出(export

    • 命名导出:支持导出多个具名成员。
      export const a = 1;
      export function b() { /* ... */ }
      // 或集中导出
      const c = 2, d = 3;
      export { c, d as renamedD }; // `as` 支持重命名
    • 默认导出:每个模块仅允许一个 export default
      export default function() { /* ... */ } // 导出匿名函数
      // 或导出声明的值
      const obj = {};
      export default obj;
    • 混合导出:可同时使用命名导出和默认导出。
      export const x = 10;
      export default class MyClass { /* ... */ }
  2. 导入(import

    • 导入命名成员
      import { a, b } from './module.js';
      import { renamedD as d } from './module.js'; // 重命名导入
    • 导入默认导出
      import MyDefault from './module.js';
    • 混合导入
      import MyDefault, { x } from './module.js';
    • 整体导入:加载模块所有命名成员到命名空间对象。
      import * as utils from './math.js';
      utils.capitalize('text'); // 调用导出函数

⚙️ 二、关键特性与规则

  1. 静态化

    • 依赖关系在编译时确定,import/export 必须位于模块顶层,不可动态嵌套。
    • 支持静态分析(如摇树优化 Tree-shaking)。
  2. 作用域隔离

    • 模块内变量默认局部作用域,避免全局污染。
    • 严格模式(Strict Mode)强制启用。
  3. 动态导入(import()

    • 按需异步加载模块,返回 Promise。
      import('./module.js').then(module => {module.doSomething();
      });
  4. 模块继承

    • 通过 export * from 'parent' 继承父模块所有命名导出。
    • 支持扩展父模块功能并补充新接口。

🔍 三、与 CommonJS 的差异

特性ES6 模块CommonJS
加载方式编译时静态解析运行时动态加载
导出类型值引用(实时绑定)值拷贝(导出后修改不影响)
异步支持原生支持动态导入(import()无原生异步加载
顶层作用域严格模式强制启用非严格模式可选
循环依赖处理通过实时绑定解决可能因缓存导致不一致

💡 四、最佳实践

  • 模块拆分:按功能划分独立模块,提升复用性。
  • 默认导出适用场景:单一功能类/工具库入口。
  • 命名导出适用场景:多工具函数集合或需按需加载场景。
  • 路径别名:通过构建工具(如 Webpack)配置 resolve.alias 简化路径。

示例:混合导出与导入

// math.js
export const PI = 3.14;
export default function add(a, b) { return a + b; }// app.js
import calculate, { PI } from './math.js';
console.log(calculate(1, 2), PI); // 输出:3, 3.14

ES6 模块规范通过静态化、作用域隔离和原生异步支持,提供了标准化、高性能的模块化方案,成为现代前端工程的基石。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90742.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python day25

浙大疏锦行 Python day25. 内容: 异常处理,在日常的编码工作过程中,为了避免由于各种bug导致的异常情况,我们需要引入异常处理机制,它的工作场景是当程序运行出现意外时,可以根据编码规则处理响应的错误。…

mac llama_index agent算术式子计算示例

本文通过简单数学计算,示例llama_index使用agent解决复杂任务过程。 假设mac本地llama_index环境已安装,过程参考 mac测试ollama llamaindex-CSDN博客 测试mac笔记本内存8G,所以使用较小LLM完成示例。 ollama pull qwen3:1.7b qwen3:1.7b能…

uni-app小程序云效持续集成

创建项目 必须是 cli 命令行创建的 uni-app 小程序项目参考uni-app官方构建命令: npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project生成小程序代码上传密钥 管理-开发设置-小程序代码上传生成的文件放在根目录即可 安装持续集成插件 pnpm install uni-mi…

uniapp+高德地图实现打卡签到、打卡日历

一、注册高德地图。应用管理创建应用&#xff0c;分别添加Andriod平台、Web服务、Web端、微信小程序四种类型的key。二、考勤规则打卡地点选择位置代码&#xff1a;<script setup lang"ts"> import { onMounted, onUnmounted, reactive, ref, watchEffect } fr…

CentOS 7.9 + GCC9 离线安装 IWYU(Include What You Use)

本教程适用于 离线环境下在 CentOS 7.9 系统中使用 GCC 9 离线安装 IWYU 的完整步骤&#xff0c;涵盖 Clang 11.1.0 编译、IWYU 构建以及头文件自动优化流程。&#x1f4e5; 一、准备安装包请提前下载以下源码包&#xff08;可通过在线机器提前下载&#xff0c;再传输到离线环境…

基于Dapr Sidecar的微服务通信框架设计与性能优化实践

基于Dapr Sidecar的微服务通信框架设计与性能优化实践 一、技术背景与应用场景 随着微服务架构的广泛应用&#xff0c;分布式系统中服务间通信、可观察性、可靠性等问题日益凸显。Dapr&#xff08;Distributed Application Runtime&#xff09;作为一个开源的微服务运行时&…

Claude Code 超详细完整指南(2025最新版)

&#x1f680; 终端AI编程助手 | 高频使用点 生态工具 完整命令参考 最新MCP配置 &#x1f4cb; 目录 &#x1f3af; 快速开始&#xff08;5分钟上手&#xff09;&#x1f4e6; 详细安装指南 系统要求Windows安装&#xff08;WSL方案&#xff09;macOS安装Linux安装安装验…

【lucene】SegmentReader初始化过程概述

readers[i] new SegmentReader(sis.info(i), sis.getIndexCreatedVersionMajor(), IOContext.READ); 这个方法已经把所有的文件都读完了么&#xff1f;没有“读完”&#xff0c;但已经**全部“打开”**了。| 动作 | 是否发生 | |---|---| | **打开文件句柄 / mmap** | ✅ 立即完…

通俗理解主机的BIOS和UEFI启动方式

“对于 22.04 版本&#xff0c;这些操作说明应适用于通过 BIOS 或 UEFI 两种方式创建和运行启动盘。”我们来详细解释一下这句话的含义&#xff0c;这句话的核心意思是&#xff1a;你按照这个教程制作出来的 Ubuntu U 盘&#xff0c;将拥有极佳的兼容性&#xff0c;无论是在老电…

Canal 1.1.7的安装

数据库操作的准备 1、开启 Binlog 写入功能&#xff0c;配置 binlog-format 为 ROW 模式&#xff0c;my.cnf 中配置如下: vi /etc/my.cnf [mysqld] log-binmysql-bin # 开启 binlog binlog-formatROW # 选择 ROW 模式 server_id1 # 配置 MySQL replaction 需要定义&#xff0c;…

python---类型转换

文章目录1. 基本类型转换函数int() - 转换为整数float() - 转换为浮点数str() - 转换为字符串bool() - 转换为布尔值2. 其他类型转换list() - 转换为列表tuple() - 转换为元组set() - 转换为集合&#xff08;去重&#xff09;dict() - 转换为字典3. 注意事项1. 兼容性&#xff…

JVM terminated. Exit code=1

出现JVM terminated. Exit code1错误通常是因为 Eclipse 所需的 Java 版本与系统中配置的 Java 版本不匹配。从错误信息中可以看到关键线索&#xff1a;-Dosgi.requiredJavaVersion21&#xff0c;表示此 Eclipse 版本需要 Java 21 或更高版本&#xff0c;但系统当前使用的是 Ja…

20250727-1-Kubernetes 网络-Ingress介绍,部署Ingres_笔记

一、NodePort存在的不足 1. 四层负载均衡  实现技术: 基于iptables和ipvs实现 OSI层级: 位于传输层(第四层) 转发依据: 基于IP地址和端口进行转发 特点: 只能看到IP和端口信息 无法识别应用层协议内容 配置简单但功能有限 2. 七层负载均衡 1)七层负载均衡的概念 …

Javaweb————HTTP的九种请求方法介绍

❤️❤️❤️一.HTTP1.0定义的三种请求方式介绍 &#x1f3cd;️&#x1f3cd;️&#x1f3cd;️&#xff08;1&#xff09;GET请求 作用&#xff1a;向服务器获取资源&#xff0c;比如常见的查询请求 应用场景&#xff1a;绝大多数场景&#xff0c;比如我们访问商城首页查看图…

C++day06(练习题)

循序渐进-基础训练 格式化输入输出 【描述】格式化输入输出练习输入三个整数和一个浮点数&#xff0c;浮点数需要保留的不同小数点后面的数字。 【输入描述】三个正整数以及以一个浮点数 【输出描述】三个整数以及保留不同位数的浮点数 【样例输入】 1 2 3 9.12345678 【样例输…

基于大模型的预训练、量化、微调等完整流程解析

随着大语言模型&#xff08;LLM&#xff09;的飞速发展&#xff0c;模型的训练、部署与优化成为了AI工程领域的重要课题。本文将从 预训练、量化、微调 等关键步骤出发&#xff0c;详细介绍大模型的完整技术流程及相关实践。1. 预训练&#xff08;Pre-training&#xff09; 1.1…

AI入门学习-模型评估示例讲解

from sklearn.metrics import classification_report, confusion_matrix from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier from sklearn.datasets import make_classification# 生成示例分类数据 # n_samples: 样本…

Python编程:初入Python魔法世界

一、常量表达式在编程中&#xff0c;常量指的是在程序执行期间其值不会改变的数据项。虽然 Python 并没有专门的语法来定义常量&#xff08;不像某些其他语言如 Java 中有 final 关键字&#xff09;&#xff0c;但在实践中&#xff0c;我们通常通过约定俗成的方式来表示一个变量…

Android WorkManager 详解:高效管理后台任务

引言在现代移动应用开发中&#xff0c;后台任务处理是一个至关重要的功能。从同步数据到定期备份&#xff0c;从发送通知到处理耗时操作&#xff0c;后台任务无处不在。然而&#xff0c;Android系统对后台任务的限制越来越严格&#xff0c;开发者需要找到既高效又符合系统规范的…

MCU(微控制器)中的高电平与低电平?

MCU&#xff08;微控制器&#xff09;中的高电平与低电平&#xff1f; 在数字电路和MCU&#xff08;微控制器&#xff09;中&#xff0c;**高电平&#xff08;High Level&#xff09;和低电平&#xff08;Low Level&#xff09;**是两种基本的逻辑状态&#xff0c;用于表示二进…