函数表达式定义工具函数的核心是“按需封装、即用即赋、避免污染作用域”,适用于数据处理、格式转换、校验等重复逻辑,推荐 const + 箭头函数,善用闭包封装配置,显式单独导出以支持 tree-shaking。

函数表达式定义工具函数,核心在于“按需封装、即用即赋、避免污染作用域”。它不是为了替代函数声明,而是解决特定场景下的灵活性与可控性问题。
明确用途再动笔
工具函数通常用于数据处理、格式转换、校验等重复逻辑。定义前先问清楚:这个函数是否只在当前模块/作用域内使用?是否需要延迟初始化?是否可能被动态替换?比如日期格式化、字符串截断、深克隆简易版——这些都适合用表达式定义,因为它们不依赖提升,且常配合配置或闭包使用。
优先用 const + 箭头函数
现代 JavaScript 中,简洁、无 this 绑定、自动返回的箭头函数是首选。配合 const 声明,语义清晰且不可重赋值:
-
推荐写法:
const formatDate = (date, fmt = 'YYYY-MM-DD') => { /* 实现 */ }; - 避免 var:var 声明会带来变量提升和重复声明风险,不符合工具函数“确定性”要求
- 慎用 function 关键字表达式:除非需要 arguments 或动态 this(极少见),否则箭头函数更轻量
善用闭包封装配置或状态
表达式天然支持闭包,适合创建可配置的工具函数:
- 例如带默认精度的四舍五入:
const roundTo = (precision) => (num) => Math.round(num * Math.pow(10, precision)) / Math.pow(10, precision); - 再如预设 API 基础路径的请求函数:
const createRequest = (baseUrl) => (url, options) => fetch(`${baseUrl}${url}`, options); - 这类函数一旦生成,内部配置就固化,调用时干净利落
导出与复用要清晰
在模块环境中,表达式定义的工具函数应显式导出,避免隐式依赖:
- ESM 中直接
export const throttle = (fn, delay) => { ... }; - 不建议把多个工具函数塞进一个对象再导出(如
export const utils = { ... }),除非有强聚合意图;更推荐单独命名导出,利于 tree-shaking 和按需导入 - 若需批量导出,可用
export { debounce, throttle, deepEqual };保持粒度可控
不复杂但容易忽略:函数表达式不是语法糖,它是把函数当值来用的第一步——理解这点,才能真正用好工具函数的封装力与组合力。

















