关于es6-module的语法

ES6(ECMAScript 2015)引入了模块化的概念,旨在使 JavaScript 更加模块化、可维护和可重用。ES6 模块允许我们在不同的文件中组织和管理代码,使得不同模块之间的依赖关系更加清晰。

1. 导出(Export)

1.1 命名导出(Named Exports)

命名导出允许你导出多个变量、函数或类,每个导出的名称必须是唯一的。

// file1.js
export const name = 'John';
export function greet() {console.log('Hello!');
}
export class Person {constructor(name) {this.name = name;}
}

使用命名导出时,你可以在导入时使用相同的名称来访问这些导出。

// file2.js
import { name, greet, Person } from './file1';
console.log(name); // John
greet();           // Hello!
const person = new Person('Jane');

1.2 默认导出(Default Export)

每个模块只能有一个默认导出。默认导出的语法更加简洁,可以导出一个值(如对象、函数、类等)。

js// file1.js
const person = {name: 'John',age: 30
};
export default person;

导入默认导出的方式没有花括号。

js// file2.js
import person from './file1';
console.log(person.name); // John

1.3 导出重命名(Export Rename)

你可以在导出时使用 as 进行重命名。

js// file1.js
const firstName = 'John';
export { firstName as name };

1.4 导出合并(Export All)

你可以一次性将一个模块的所有导出重新导出,适用于模块间的组合。

js

// file1.js
export const name = 'John';// file2.js
export * from './file1'; // 导出 file1.js 中所有的导出

2. 导入(Import)

2.1 导入命名导出(Named Imports)

// file1.js
export const name = 'John';
export function greet() {console.log('Hello!');
}// file2.js
import { name, greet } from './file1';
console.log(name);  // John
greet();            // Hello!

2.2 导入默认导出(Default Import)

js
// file1.js
const person = { name: 'John' };
export default person;// file2.js
import person from './file1';
console.log(person.name); // John

2.3 导入重命名(Import Rename)

导入时使用 as 可以对导入的模块进行重命名。

// file1.js
export const firstName = 'John';// file2.js
import { firstName as name } from './file1';
console.log(name); // John

2.4 导入全部(Import All)

你可以一次性导入一个模块的所有命名导出,并将其作为一个对象使用。

// file1.js
export const name = 'John';
export const age = 30;// file2.js
import * as person from './file1';
console.log(person.name); // John
console.log(person.age);  // 30

2.5 动态导入(Dynamic Import)

ES6 模块支持动态导入,返回一个 Promise,可以根据需要异步加载模块。

// 动态导入
import('./file1').then(module => {console.log(module.name);
});

3. 模块化的特点

3.1 模块是默认严格模式

ES6 模块在模块内部默认使用严格模式(‘use strict’;),因此所有模块的代码都是严格模式的代码,不需要显式声明。

// file1.js
x = 10; // 报错,严格模式下不允许未声明的变量

3.2 模块的作用域

每个模块都有自己的作用域,不会污染全局作用域。模块之间通过 import 和 export 进行通信。

// file1.js
let counter = 0;
export function increment() {counter++;
}// file2.js
import { increment } from './file1';
increment();
console.log(counter); // 由于作用域隔离,counter 在 file2.js 中不可访问

3.3 循环依赖

ES6 模块系统解决了模块间的循环依赖问题。对于导入的模块,它会暂时处于“挂起”状态,直到依赖的模块加载完成。

// a.js
import { b } from './b.js';
export const a = 'a';// b.js
import { a } from './a.js';
export const b = 'b';console.log(a, b); // 输出: a b

3.4 只读导入

ES6 模块中的导入是只读的。你无法修改从模块导入的值。

// file1.js
export let name = 'John';// file2.js
import { name } from './file1';
name = 'Jane'; // 错误:不能修改从模块导入的值

4. 使用模块

4.1 模块在浏览器中的使用

现代浏览器支持 module 类型的脚本。使用

<script type="module">import { name } from './file1.js';console.log(name);
</script>

4.2 在 Node.js 中使用 ES6 模块

在 Node.js 中,你需要使用 .mjs 文件扩展名或在 package.json 中设置 “type”: “module”,来启用 ES6 模块。

{"type": "module"
}

然后,你就可以在 Node.js 中使用 import 和 export 语法了。

// file1.mjs
export const name = 'John';// file2.mjs
import { name } from './file1.mjs';
console.log(name); // John

5. 总结

ES6 模块引入了更简洁的语法,使得 JavaScript 的代码结构更加清晰和可维护。通过 import 和 export,我们可以将代码拆分成小的模块,按需加载,并处理依赖关系。使用 ES6 模块化的好处包括:

  • 提高代码的可维护性和可读性。
  • 更好的支持循环依赖。
  • 默认严格模式,避免了许多常见的 JavaScript 问题。

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

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

相关文章

Chrome多开终极形态解锁!「窗口管理工具+IP隔离插件

Web3项目多开&#xff0c;继ads指纹浏览器钱包被盗后&#xff0c;更多人采用原生chrome浏览器&#xff0c;当然对于新手&#xff0c;指纹浏览器每月成本也是一笔不小开支&#xff0c;今天逛Github发现了这样一个解决方案&#xff0c;作者开发了窗口管理工具IP隔离插件&#xff…

DeepSeek核心算法解析:如何打造比肩ChatGPT的国产大模型

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列一DeepSeek核心算法解析&#xff1a;如何…

arm 入坑笔记

1.开发环境&#xff08;IDE&#xff09;使用keil_5 (keil_mdk) 2.两个手册需要关注&#xff1a;用户手册&#xff08;编程需要&#xff09;&#xff0c;数据手册&#xff08;硬件&#xff09; 3.32bit地址空间&#xff1a;0~2^324GB寻址空间及&#xff08;0-FFFF_FFFF&#x…

弱监督语义分割学习计划(0)-计划制定

经过与deepseek的一番讨论和交流&#xff0c;DeepSeek为我设计了一个30天高强度学习计划&#xff0c;重点聚焦弱监督/无监督语义分割在野外场景的应用&#xff0c;结合理论与实践&#xff0c;并最终导向可落地的开源项目。以下是详细计划&#xff1a; 总体策略 优先级排序&…

vscode远程报错:Remote host key has changed,...

重装了Ubuntu系统之后&#xff0c;由20.04改为22.04&#xff0c;再用vscode远程&#xff0c;就出现了以上报错。 亲测有效的办法 gedit ~/.ssh/known_hosts 打开这个配置文件 删掉与之匹配的那一行&#xff0c;不知道删哪一行的话&#xff0c;就打开第一行这个 /.ssh/confi…

Python - 爬虫利器 - BeautifulSoup4常用 API

文章目录 前言BeautifulSoup4 简介主要特点&#xff1a;安装方式: 常用 API1. 创建 BeautifulSoup 对象2. 查找标签find(): 返回匹配的第一个元素find_all(): 返回所有匹配的元素列表select_one() & select(): CSS 选择器 3. 访问标签内容text 属性: 获取标签内纯文本get_t…

DeepSeek驱动下的数据仓库范式转移:技术解耦、认知重构与治理演进

DeepSeek驱动下的数据仓库范式转移&#xff1a;技术解耦、认知重构与治理演进 ——基于多场景实证的架构革命研究 一、技术解耦&#xff1a;自动化编程范式的演进 1.1 语义驱动的ETL生成机制 在金融风控场景中&#xff0c;DeepSeek通过动态语法树解析&#xff08;Dynamic Syn…

代码随想录算法训练营day38(补0206)

如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 如果求排列数就是外层for遍历背包&#xff0c;内层for循环遍历物品。 1.零钱兑换 题目 322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c…

golang channel底层实现?

底层数据实现 type hchan struct { qcount uint // 当前队列中的元素数量 dataqsiz uint // 环形队列的大小 buf unsafe.Pointer // 指向环形队列的指针 elemsize uint16 // 元素大小 closed uint32 // chan…

图的最小生成树算法: Prim算法和Kruskal算法(C++)

上一节我们学习了最短路径算法, 这一节来学习最小生成树. 最小生成树(Minimum Spanning Tree, MST)算法是图论中的一种重要算法, 主要用于在加权无向图中找到一棵生成树, 使得这棵树包含图中的所有顶点, 并且所有边的权重之和最小. 这样的树被称为最小生成树. 最小生成树广泛应…

矩阵系统源码搭建的数据管理开发功能解析,支持OEM

一、引言 在矩阵系统中&#xff0c;数据犹如血液&#xff0c;贯穿整个系统的运行。高效的数据管理开发功能是确保矩阵系统稳定、可靠运行的关键&#xff0c;它涵盖了数据的存储、处理、安全等多个方面。本文将深入探讨矩阵系统源码搭建过程中数据管理功能的开发要点。 二、数据…

DeepSeek 助力 Vue 开发:打造丝滑的日期选择器(Date Picker),未使用第三方插件

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

操作系统知识点2

1.P&#xff0c;V操作可以实现进程同步&#xff0c;进程互斥&#xff0c;进程的前驱关系 2.先来先服务调度算法是不可抢占的算法 3.UNIX操作系统中&#xff0c;对文件系统中空闲区的管理通常采用成组链接法 4.对于FAT32文件系统&#xff0c;它采用的是链接结构 5.不同的I/O…

【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】

文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-1微调2.2.3.2 zero-2微调2.2.3.3 zero-3微调2.2.3.4 单卡Lora微调 2.2.4 实验2.2.4.1 实验1&#xff1a;多GPU微调-zero12.2.4.2 实验2&#xff1a;…

iOS 中使用 FFmpeg 进行音视频处理

在 iOS 中使用 FFmpeg 进行音视频处理,通常需要将 FFmpeg 的功能集成到项目中。由于 FFmpeg 是一个 C 库,直接在 iOS 中使用需要进行一些配置和封装。 1. 在 iOS 项目中集成 FFmpeg 方法 1:使用 FFmpeg 预编译库 下载 FFmpeg iOS 预编译库: 可以从以下项目中获取预编译的 …

Elasticsearch:将 Ollama 与推理 API 结合使用

作者&#xff1a;来自 Elastic Jeffrey Rengifo Ollama API 与 OpenAI API 兼容&#xff0c;因此将 Ollama 与 Elasticsearch 集成非常容易。 在本文中&#xff0c;我们将学习如何使用 Ollama 将本地模型连接到 Elasticsearch 推理模型&#xff0c;然后使用 Playground 向文档提…

openGauss 3.0 数据库在线实训课程18:学习视图管理

前提 我正在参加21天养成好习惯| 第二届openGauss每日一练活动 课程详见&#xff1a;openGauss 3.0.0数据库在线实训课程 学习目标 掌握openGauss视图的管理&#xff1a;创建视图、删除视图、查询视图的信息、修改视图的信息。 课程作业 1.创建表&#xff0c;创建普通视图…

腾讯云大模型知识引擎×DeepSeek赋能文旅

腾讯云大模型知识引擎DeepSeek赋能文旅 ——以合肥文旅为例的技术革新与实践路径 一、技术底座&#xff1a;知识引擎与DeepSeek的融合逻辑 腾讯云大模型知识引擎与DeepSeek模型的结合&#xff0c;本质上是**“知识库检索增强生成&#xff08;RAG&#xff09;实时联网能力”**…

利用SkinMagic美化MFC应用界面

MFC(Microsoft Foundation Class)应用程序的界面设计风格通常比较保守,而且虽然MFC框架的控件功能强大且易于集成,但视觉效果较为朴素,缺乏现代感。尤其是MFC应用程序的设计往往以功能实现为核心,界面设计可能显得较为简洁甚至略显呆板,用户体验可能不如现代应用程序流畅…

qt QOpenGLTexture详解

1. 概述 QOpenGLTexture 是 Qt5 提供的一个类&#xff0c;用于表示和管理 OpenGL 纹理。它封装了 OpenGL 纹理的创建、分配存储、绑定和设置像素数据等操作&#xff0c;简化了 OpenGL 纹理的使用。 2. 重要函数 构造函数&#xff1a; QOpenGLTexture(const QImage &image,…