ES6引入模块系统,通过export导出和import导入实现代码复用;支持命名导出与默认导出,需在HTML中使用type="module"加载,模块自动运行在严格模式下且仅执行一次。

JavaScript 的模块系统在 ES6(ECMAScript 2015)中正式引入,解决了以往缺乏原生模块支持的问题。通过 import 和 export,开发者可以将代码拆分成多个文件,实现更好的组织和复用。下面详细介绍如何使用 ES6 模块。
1. export:导出模块内容
在一个 JavaScript 文件中,可以通过 export 关键字将变量、函数或类暴露出去,供其他文件导入使用。
支持两种导出方式:命名导出和默认导出。
命名导出(Named Exports)
立即学习“Java免费学习笔记(深入)”;
可以在声明的同时导出,也可以统一导出。
示例:
// math.js export const PI = 3.14159;export function add(a, b) { return a + b; }
function multiply(a, b) { return a * b; }
export { multiply }; // 单独导出
默认导出(Default Export)
每个模块只能有一个默认导出,适合导出单个类或函数。
示例:
// calculator.js
export default function(a, b) {
return a - b;
}
或者导出类:
// Person.js
export default class Person {
constructor(name) {
this.name = name;
}
greet() {
console.log(Hello, I'm ${this.name});
}
}
2. import:导入模块内容
使用 import 可以从其他模块加载导出的内容。
导入命名导出
需要使用花括号 {} 匹配导出的名称。
示例:
// main.js
import { PI, add, multiply } from './math.js';
console.log(PI); // 3.14159
console.log(add(2, 3)); // 5
console.log(multiply(4, 5)); // 20
导入默认导出
不需要花括号,可以自定义名称。
示例:
// main.js import subtract from './calculator.js'; console.log(subtract(10, 4)); // 6import Person from './Person.js'; const p = new Person("Alice"); p.greet(); // Hello, I'm Alice
混合导入
同时导入默认和命名导出:
import Person, { PI, add } from './utils.js';
整体导入
将整个模块导入为一个对象:
import * as MathUtils from './math.js'; console.log(MathUtils.PI); console.log(MathUtils.add(2, 3));
3. 使用模块的注意事项
要在浏览器中使用 ES6 模块,需注意以下几点:
- HTML 中引入模块必须加上 type="module":
- 模块运行在严格模式下,无需显式写 "use strict";
- 模块脚本存在跨域限制,建议在服务器环境下运行(如 localhost);
- 模块是延迟解析的,会在页面解析完成后执行;
- 同一个模块只会被执行一次,即使被多次导入。
4. 实际项目中的常见用法
通常会将工具函数集中导出:
// utils/index.js
export { default as formatDate } from './formatDate.js';
export { default as validateEmail } from './validateEmail.js';
export * from './constants'; // 导出所有命名导出
然后统一导入:
import { formatDate, validateEmail, API_URL } from './utils/index.js';
基本上就这些。掌握 import 和 export 的基本语法和使用场景,就能很好地组织现代 JavaScript 项目结构。










