什么是javascript模块_如何导入和导出模块?

JavaScript模块是ES6起原生支持的代码组织方式,通过import/export实现作用域隔离与复用;需注意默认导出唯一、命名导出需大括号、路径规则及静态解析限制。

JavaScript 模块是将代码拆分为独立、可复用单元的方式,每个模块拥有自己的作用域,不会污染全局环境。从 ES6(ES2015)开始,原生支持 importexport 语法,这是现代 JavaScript 开发的标准模块机制。

模块的基本规则

模块文件默认处于严格模式,顶层的 thisundefined;变量、函数、类等不会自动挂到全局对象上。只有显式导出的内容才能被其他模块使用。

  • 一个模块可以有多个命名导出(export const/name/function/class
  • 但只能有一个默认导出(export default
  • 模块路径必须带扩展名(如 .js)或以 /./../ 开头,否则会被当作内置模块或包名处理

如何导出模块内容

export 关键字暴露变量、函数、类等,供其他模块导入。

  • 命名导出:可导出多个,导入时需用大括号并保持名称一致
    export const PI = 3.14;
    export function add(a, b) { return a + b; }
  • 批量命名导出export { PI, add };
  • 重命名导出export { add as sum };
  • 默认导出:每个模块最多一个,导入时可自定义名字,更灵活
    export default function greet() { return 'Hello'; }

如何导入模块内容

import 从其他模块加载导出项,注意浏览器中需在 中使用。

  • 导入命名导出import { PI, add } from './math.js';
  • 导入并重命名import { add as sum } from './math.js';
  • 导入全部命名导出import * as math from './math.js'; → 用 math.PI 访问
  • 导入默认导出import greet from './greet.js';(无需大括号)
  • 同时导入默认和命名导出import greet, { PI } from './greet.js';

实际使用注意事项

模块是静态解析的——import 必须写在顶层,不能放在条件语句或函数内;动态导入可用 import() 函数(返回 Promise),适合按需加载。

  • Node.js 中启用 ES 模块需加 "type": "module" 字段或用 .mjs 后缀
  • 浏览器中路径是相对当前 HTML 文件还是 JS 文件?答:相对于引入该模块的 JS 文件
  • 不加 type="module" 的 script 标签无法使用 import/export

基本上就这些。模块让代码更清晰、可维护,也方便配合打包工具或原生支持做优化。不复杂但容易忽略细节,比如路径写法或默认/命名导出混用时的语法差异。