函数表达式是javascript实现模块化的核心方式,支持封装隔离、按需调用、闭包私有状态管理及es模块导出复用。

函数表达式是 JavaScript 中组织和复用代码的重要方式,它天然支持封装、隔离与按需调用,非常适合实现模块化逻辑。
用函数表达式封装独立功能
把一段有明确输入输出、职责单一的逻辑包装成函数表达式,就完成了最基础的模块化。它不污染全局作用域,还能通过变量名体现意图。
- 避免直接写一堆语句,改用 const formatPrice = (amount) => `¥${amount.toFixed(2)}` 这样的写法
- 函数体内部只处理本职工作,比如校验、转换、计算,不主动修改外部状态
- 命名清晰,如 validateEmail、debounce、parseQueryString,一眼知道用途
组合多个函数表达式构建业务模块
单个函数表达式能力有限,但多个函数可以像积木一样拼接,形成更高层的模块逻辑。
- 用函数作为参数传递,比如 fetchData.then(handleResponse).catch(showError)
- 链式调用:把前一个函数的输出直接传给下一个,例如 filterUsers(users).map(toUserCard).join('')
- 用高阶函数抽象重复模式,如 const withLoading = (fn) => async (...args) => { setLoading(true); await fn(...args); setLoading(false); }
配合闭包管理私有状态
函数表达式配合 IIFE 或嵌套函数,能自然形成闭包,把配置、缓存、计数器等敏感数据“藏”起来。
- 例如创建一个带缓存的 API 调用器:const createCachedFetcher = (cache = new Map()) => (url) => { if (cache.has(url)) return cache.get(url); const data = await fetch(url).then(r => r.json()); cache.set(url, data); return data; };
- 模块内的“私有工具函数”不必暴露,只导出必要的接口函数即可
- 避免用全局变量保存临时状态,改用闭包变量更安全、更易测试
导出与复用:让函数表达式成为可共享模块
在 ES 模块环境中,函数表达式本身不是模块,但可以作为值被导出,成为模块对外的接口。
- 写成 export const formatDate = (date) => new Date(date).toLocaleDateString();
- 批量导出时可用对象解构:export const utils = { formatDate, formatNumber, truncate }; export { formatDate, formatNumber };
- 在其他文件中按需导入:import { formatDate } from './utils.js'; 或 import * as utils from './utils.js';











