17370845950

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

JavaScript 的模块系统在 ES6(ECMAScript 2015)中正式引入,解决了以往缺乏原生模块支持的问题。通过 importexport,开发者可以将代码拆分成多个文件,实现更好的组织和复用。下面详细介绍如何使用 ES6 模块。

1. export:导出模块内容

在一个 JavaScript 文件中,可以通过 export 关键字将变量、函数或类暴露出去,供其他文件导入使用。

支持两种导出方式:命名导出和默认导出。

命名导出(Named Exports)

可以在声明的同时导出,也可以统一导出。

示例:

// 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)); // 6

import 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 项目结构。