目录

一、ES6模块化的核心概念

1. 模块化的基本规则

二、export的用法

1. 命名导出(Named Export)

示例:

2. 默认导出(Default Export)

示例:

默认导出函数或类:

3. 导出语句的统一声明

示例:

三、import的用法

1. 按需导入命名成员

2. 导入默认成员

3. 同时导入命名成员和默认成员

4. 导入整个模块

5. 重命名导入成员

四、动态导入(Dynamic Import)

1. 动态加载模块

示例:

2. 动态导入的应用场景

五、注意事项

1. 模块环境配置

2. 常见错误

六、总结


一、ES6模块化的核心概念

1. 模块化的基本规则

  • 一次性加载:每个模块只会被加载一次,后续请求直接从内存中获取。
  • 局部作用域:模块内的变量、函数仅在模块内部生效,不会污染全局作用域。
  • 导出(export:通过export关键字暴露模块中的变量、函数或类。
  • 导入(import:通过import关键字从其他模块中导入已导出的内容。

二、export的用法

1. 命名导出(Named Export)

命名导出允许在模块中导出多个成员,导入时需使用相同的名称。

示例:
// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;// main.js
import { add, subtract } from './math.js';
console.log(add(2, 3)); // 输出: 5
console.log(subtract(5, 2)); // 输出: 3

 批量导出:

// utils.js
const pi = 3.14;
function multiply(a, b) { return a * b; }export { pi, multiply };// main.js
import { pi, multiply } from './utils.js';
console.log(multiply(pi, 2)); // 输出: 6.28

2. 默认导出(Default Export)

每个模块只能有一个默认导出,导入时可以使用任意名称。

示例:
// user.js
const user = { name: 'Alice', age: 25 };
export default user;// main.js
import myUser from './user.js';
console.log(myUser.name); // 输出: Alice
默认导出函数或类:
// calculator.js
export default function add(a, b) { return a + b; }// main.js
import sum from './calculator.js';
console.log(sum(3, 4)); // 输出: 7

3. 导出语句的统一声明

可以在模块末尾集中导出所有成员。

示例:
// tools.js
const base = 10;
function square(n) { return n * n; }export { base, square };// main.js
import { base, square } from './tools.js';
console.log(square(base)); // 输出: 100

三、import的用法

1. 按需导入命名成员

导入模块中指定的命名导出。

import { add, subtract } from './math.js';
console.log(add(1, 2)); // 输出: 3

2. 导入默认成员

直接导入模块的默认导出。

import sum from './calculator.js';
console.log(sum(5, 5)); // 输出: 10

3. 同时导入命名成员和默认成员

import sum, { add, subtract } from './math.js';
console.log(sum(2, 3)); // 输出: 5
console.log(add(1, 1)); // 输出: 2

4. 导入整个模块

将模块的所有导出内容作为一个对象导入。

import * as math from './math.js';
console.log(math.add(2, 3)); // 输出: 5
console.log(math.subtract(5, 2)); // 输出: 3

5. 重命名导入成员

通过as关键字避免命名冲突。

import { add as sum, subtract } from './math.js';
console.log(sum(2, 3)); // 输出: 5

四、动态导入(Dynamic Import)

1. 动态加载模块

import()返回一个Promise,适用于按需加载模块。

示例:
// 动态加载模块
import('./math.js').then(module => {console.log(module.add(2, 3)); // 输出: 5}).catch(error => console.error('加载失败:', error));// 使用async/await
const module = await import('./math.js');
console.log(module.add(2, 3)); // 输出: 5

2. 动态导入的应用场景

  • 按需加载:减少初始加载时间,提升性能。
  • 条件加载:根据用户操作或设备类型动态加载模块。
  • 异步加载:处理大型模块或依赖库。

五、注意事项

1. 模块环境配置

  • 浏览器环境:需在<script>标签中添加type="module"
    <script type="module" src="main.js"></script>

  • Node.js环境:在package.json中设置"type": "module"

 

2. 常见错误

  • 默认导出只能有一个:每个模块仅能使用一次export default
  • 命名冲突:导入时需注意名称一致性,可通过as重命名。
  • 作用域限制export语句不能出现在条件语句或函数内部。

 

六、总结

ES6的exportimport为JavaScript模块化提供了标准化的解决方案,其核心优势在于:

  1. 代码结构清晰:通过模块化组织代码,降低耦合度。
  2. 避免全局污染:模块作用域隔离了变量和函数。
  3. 提高复用性:模块可被多个文件共享和调用。
  4. 动态加载能力:按需加载模块,优化性能。

通过合理使用exportimport,开发者可以构建更高效、更易维护的JavaScript应用程序。在实际开发中,建议根据项目需求灵活选择命名导出或默认导出,并结合动态导入优化加载策略。

 

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

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

相关文章

硬核技术协同:x86 生态、机密计算与云原生等技术如何为产业数字化转型筑底赋能

在产业数字化转型的浪潮中&#xff0c;x86 生态构建、机密计算与 AI 融合、高性能网卡突破、云原生 OS 实践、国产数据库优化等技术领域的突破&#xff0c;正成为支撑数字化基础设施升级与业务创新的核心引擎。以下从技术深度与产业实践角度&#xff0c;系统性解析各领域的最新…

Java项目:基于SSM框架实现的网络财务管理系统【ssm+B/S架构+源码+数据库+毕业论文+远程部署】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本网络财务管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息…

1.5.Vue v-for 和 指令修饰符

vue v-for当你使用 v-for 指令来渲染列表时&#xff0c;为每个元素提供一个唯一的 key 属性是非常重要的。key 是用来给 Vue 一个提示&#xff0c;以便它能够追踪每个节点的身份&#xff0c;从而更高效地更新虚拟 DOM。key 的作用唯一标识&#xff1a;key 应该是每项数据的唯一…

(RedmiBook)上禁用触摸板或自带键盘

在红米笔记本&#xff08;RedmiBook&#xff09;上禁用触摸板或自带键盘&#xff0c;可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;通过设备管理器禁用&#xff08;Windows 系统&#xff09; 禁用触摸板 打开设备管理器 按 Win X → 选择 “设备管理器”或 Win …

15 - 多模态大语言模型 — 图文 “牵线” 系统 “成长记”:借 CLIP 练本领,从图像与文字里精准 “搭鹊桥” 的全过程 (呆瓜版 - 2 号)

目录 1、基础&#xff1a;它到底是个啥&#xff1f; 1. 1、一句话理解核心 1.2、 为啥厉害&#xff1f; 1.3、怎么发展来的&#xff1f; 2、架构&#xff1a;它的 “身体构造” 是啥样的&#xff1f; 2.1、视觉语言模型架构&#xff1a;让 AI “看懂” 世界的核心系统 2…

Day 4-1: 机器学习算法全面总结

Day 4-1: 机器学习算法全面总结 📚 学习目标 通过前三天的学习,我们已经掌握了机器学习的基础知识和经典算法。今天我们来做一个全面总结,为进入深度学习阶段做好准备。 🎯 已掌握的核心算法总结 1. 监督学习算法 1.1 回归算法 算法 核心思想 适用场景 优缺点 线性回…

雨云深度体验:从安利到教程再到全面评测

零、简介在云服务市场竞争日益激烈的当下&#xff0c;各类云服务提供商如雨后春笋般涌现。然而&#xff0c;雨云却凭借其独特的优势&#xff0c;在这片红海之中逐渐崭露头角&#xff0c;吸引了众多个人开发者与企业用户的目光。接下来&#xff0c;就让我们全方位、深层次地从安…

luoguP13511 [KOI P13511 [KOI 2025 #1] 等腰直角三角形

P13511 [KOI 2025 #1] 等腰直角三角形 - 洛谷 题目重现 题目描述 在二维平面上有 N 个不同的点。对于每个 1≤i≤N 的 i,第 i 个点的坐标为 (xi​,yi​)。 等腰三角形是指三条边中有两条边长度相等的三角形。直角三角形是指一个内角为直角 (90∘) 的三角形。直角三角形的斜…

Qt Quick 动画与过渡效果

Qt Quick 提供了强大而灵活的动画系统&#xff0c;使开发者能够轻松创建流畅、引人入胜的用户界面。从简单的属性变化到复杂的多元素协同动画&#xff0c;Qt Quick 提供了多种实现方式。本文将深入解析 Qt Quick 动画与过渡效果的核心技术和最佳实践。 一、基础动画类型 1. 数字…

LlamaIndex 和 Elasticsearch Rerankers:无与伦比的简洁

作者&#xff1a;来自 Elastic Jeffrey Rengifo 了解如何从 LlamaIndex RankGPT reranker 迁移到 Elastic 内置的 semantic reranker。 Elasticsearch 拥有与行业领先的 Gen AI 工具和服务商的原生集成。查看我们的网络研讨会&#xff0c;了解如何突破 RAG 基础&#xff0c;或使…

服务器分布式的作用都有什么?

服务器分布式是通过网络互联的架构方式&#xff0c;将一个系统中的多台服务器进行连接并协同工作&#xff0c;把一个服务器中的任务分发到不同的服务器节点上&#xff0c;以此来提高系统的性能、可靠性和可扩展性&#xff0c;下面&#xff0c;我们就来具体了解一下服务器分布式…

cocos打包web - ios设备息屏及前后台切换音频播放问题

切换前台时&#xff0c;延迟暂停与恢复能解决大部分ios平台前后台切换后音频无法恢复的问题&#xff1b; if (cc.sys.isBrowser && cc.sys.os cc.sys.OS_IOS && cc.sys.isMobile) {cc.game.on(cc.game.EVENT_GAME_INITED, () > {cc.game.on(cc.game.EVENT_…

期货Level2五档委托簿0.25秒高频分钟与日级历史行情数据解析

在金融数据分析领域&#xff0c;本地CSV格式的期货数据为研究人员和交易者提供了丰富的原始信息。本文将介绍如何有效利用不同类型的期货数据&#xff0c;包括分钟数据、高频Tick、五档Level2等&#xff0c;并阐述数据处理与分析方法。一、数据概述期货分钟数据通常包含时间戳、…

原生html+js+jq+less 实现时间区间下拉弹窗选择器

html弹窗<div class"popupForm" id"popupForm10"><div class"pop-box"><i class"iconfont icon-quxiao cancel" onclick"toggleForm(10)"></i><div class"title">选择时间</div…

基于逻辑回归、随机森林、梯度提升树、XGBoost的广告点击预测模型的研究实现

文章目录有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主一、项目背景与目标二、数据概览与预处理2.1 数据导入与初步分析2.2 缺失值与重复值处理2.3 目标变量分布三、探索性数据分析&#xff08;EDA&#xff09;3.1 数值变量分布3.2 类别变量分布3…

Docker学习相关视频笔记(三)

参考视频地址&#xff1a;40分钟的Docker实战攻略&#xff0c;一期视频精通Docker。感谢作者的辛苦付出。 本文是Docker学习相关视频笔记&#xff08;一&#xff09;与Docker学习相关视频笔记&#xff08;二&#xff09;的后续 4、Docker命令 4.8 Docker 网络 4.8.1 桥接模式…

RK3568笔记九十五:基于FFmpeg和Qt实现简易视频播放器

若该文为原创文章,转载请注明原文出处。 一、开发环境 1、硬件:正点原子ATK-DLRK3568 2、QT: 5.14.2 3、系统: buildroot 二、实现功能 使用ffmpeg音视频库软解码实现视频播放器 支持打开多种本地视频文件(如mp4,mov,avi等) 视频播放支持实时开始,暂停,继续播放 采…

【LLM】Kimi-K2模型架构(MuonClip 优化器等)

note Kimi K2 的预训练阶段使用 MuonClip 优化器实现万亿参数模型的稳定高效训练&#xff0c;在人类高质量数据成为瓶颈的背景下&#xff0c;有效提高 Token 利用效率。MuonClip Optimizer优化器&#xff0c;解决随着scaling up时的不稳定性。Kimi-K2 与 DeepSeek-R1 架构对比…

Vue基础(25)_组件与Vue的内置关系(原型链)

了解组件与Vue的内置关系前&#xff0c;我们需要回顾js原型链基础知识&#xff1a;1、构造函数构造函数是一种特殊的方法&#xff0c;用于创建和初始化一个新的对象。它们是使用 new 关键字和函数调用来创建对象的。构造函数实际上只是一个普通的函数&#xff0c;通常以大写字母…

kafka中生产者的数据分发策略

在 Kafka 中&#xff0c;生产者的数据分发策略决定了消息如何分配到主题的不同分区。在 Python 中&#xff0c;我们通常使用 kafka-python 库来操作 Kafka&#xff0c;下面详细讲解其数据分发策略及实现代码。一、Kafka 生产者数据分发核心概念分区&#xff08;Partition&#…