JavaScript模块是ES6引入的原生代码复用机制,通过export导出、import导入实现作用域隔离与严格模式执行;支持命名导出、默认导出、统一导出及动态导入import()。

JavaScript模块是一组可复用的代码单元,每个模块封装自己的变量、函数或类,不会污染全局作用域。从ES6(ECMAScript 2015)开始,原生支持模块系统,使用export和import语法实现功能的导出与导入。
模块的基本特征
模块默认是严格模式,顶层this为undefined;模块作用域独立,变量不会自动挂到window上;模块只执行一次,多次导入仍共享同一份实例。
如何导出功能(export)
一个模块可通过多种方式对外暴露内容:
-
命名导出(Named Export):可导出多个值,名称必须与定义一致
export const PI = 3.14;
export function add(a, b) { return a + b; }
export class Calculator { ... } -
默认导出(Default Export):每个模块最多一个,默认导出可使用任意名字导入
export default function greet(name) { return `Hello, ${name}`; } -
统一导出/重命名导出
export { add as sum, PI as pi };
export { default as greetFn } from './utils.js';
如何导入功能(import)
导入需在模块文件中进行(不能在普通脚本中直接用,除非设置type="module"):
立即学习“Java免费学习笔记(深入)”;
-
导入命名导出:必须用大括号,名称要与导出一致
import { PI, add } from './math.js'; -
导入默认导出:不用大括号,可自定义名字
import greet from './greeting.js'; // greet 是默认导出的函数 -
同时导入默认 + 命名
import greet, { add, PI } from './math.js'; -
导入全部并作为命名空间对象
import * as math from './math.js'; // 使用 math.add(), math.PI -
仅执行模块(不导入任何值):用于副作用,如注册全局插件
import './polyfill.js';
实际使用注意事项
浏览器中使用模块需确保HTML脚本标签声明type="module":
Node.js中需将package.json设为"type": "module",或使用.mjs后缀。
动态导入import()返回Promise,适用于按需加载:
const module = await import('./lazy.js');











