export不会创建全局变量,而是通过es module的静态导入机制实现工具类复用;应使用命名导出或默认导出配合import,避免挂载window,推荐统一入口index.js re-export。

在 JavaScript 中,export 本身**不会创建全局变量**,它只是定义模块的对外接口。所谓“全局通用的工具类”,实际是指在多个模块中都能方便导入复用的类——这靠的是模块系统(ES Module)的静态导入机制,而不是挂到 window 或全局作用域上。
✅ 正确做法:用 export + default / 命名导出,配合 import 复用
把工具类写在一个独立文件(如 utils/DateHelper.js),用 export 暴露出去,其他地方用 import 导入即可。这是现代 JS 的标准方式,安全、可树摇、无污染。
-
命名导出(推荐用于多个工具类):
// utils/Tools.jsexport class DateHelper { ... }export class StringUtils { ... }export const API_BASE = 'https://api.example.com'; -
默认导出(适合单个主类):
// utils/Validator.jsexport default class Validator { ... } -
使用时导入:
// main.jsimport { DateHelper, StringUtils } from './utils/Tools.js';import Validator from './utils/Validator.js';const date = new DateHelper();
⚠️ 不推荐:强行挂到全局(如 window.MyUtils)
虽然可以这么做(window.MyUtils = class { ... }),但会破坏模块封装性,导致命名冲突、无法 tree-shaking、SSR 报错、TypeScript 类型丢失等问题。仅在遗留脚本或调试时临时使用,不作为工程方案。
? 补充技巧:统一入口 + 自动导出
如果工具类较多,可在 utils/index.js 中集中 re-export,简化导入路径:
-
// utils/index.jsexport { DateHelper } from './DateHelper.js';export { StringUtils } from './StringUtils.js';export { default as Validator } from './Validator.js'; -
// 使用时import { DateHelper, Validator } from './utils/index.js';
? 注意事项
- 确保文件后缀为
.js且 HTML 中 script 类型为type="module",或构建工具(Vite/Webpack)已启用 ES Module 支持 - Node.js 环境需在
package.json中设置"type": "module",或使用.mjs后缀 - TypeScript 中,类定义自动参与类型推导,无需额外声明(只要路径正确、有
export)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











