箭头函数可导出纯函数,但需避免副作用和可变状态捕获;应通过exports.xxx或module.exports=()=>{}导出,禁用exports=()=>{}以免断开引用。

箭头函数本身不能直接作为 module.exports 的赋值目标(除非你显式赋值),但它完全可以用来定义纯函数逻辑,并通过 exports 或 module.exports 导出——关键在于“导出的是函数值”,而不是语法形式。
用箭头函数定义纯函数,再导出
纯函数指无副作用、输入相同则输出确定的函数。箭头函数天然适合写这类逻辑,只要不捕获外部可变状态或调用非纯操作(如 Date.now()、Math.random()、DOM 操作等)即可。
- ✅ 推荐方式:先声明箭头函数,再赋值给
module.exports或exports.xxx - ⚠️ 注意:
exports = () => {...}会断开exports与module.exports的引用,导致模块导出失败;应使用module.exports = () => {...}或exports.name = () => {...}
示例(math.js):
const add = (a, b) => a + b; const multiply = (x, y) => x * y; const isEven = n => n % 2 === 0; <p>// ✅ 正确导出多个纯函数 exports.add = add; exports.multiply = multiply; exports.isEven = isEven;</p><p>// 或者只导出一个默认函数(覆盖整个 module.exports) // module.exports = (x, y) => x ** y;</p>
导出单个箭头函数作为默认逻辑
如果模块只封装一个核心纯函数,直接用 module.exports 赋值最简洁。
- 保持函数无闭包依赖(避免意外捕获模块级变量)
- 确保参数完整、不依赖外部状态(如全局配置需显式传入)
示例(capitalize.js):
module.exports = str => {
if (typeof str !== 'string') return str;
return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
};使用时:const capitalize = require('./capitalize');
配合解构导出,提升可读性与树摇兼容性
ESM 风格虽不在 CommonJS 原生支持,但你可以模拟命名导出习惯,方便未来迁移或工具识别。
- 用
exports挂载具名属性,而非覆盖module.exports - 函数体保持简洁、无 this / arguments / new.target 等限制(箭头函数本就不支持这些,反而是优势)
示例(utils.js):
exports.sum = (...nums) => nums.reduce((a, b) => a + b, 0); exports.max = (...nums) => Math.max(...nums); exports.pipe = (...fns) => x => fns.reduce((v, f) => f(v), x);
使用者可按需引入:const { sum, max } = require('./utils');
避免常见陷阱
箭头函数在导出场景下有几点必须注意:
- 不要在箭头函数内修改参数对象或数组(破坏纯性),如
arr.push();应返回新结构 - 避免隐式依赖环境,例如
() => process.env.NODE_ENV—— 这不是纯函数,应改为env => env === 'prod' - 导出前确保函数已定义,不要在条件块中定义后导出(易引发 ReferenceError)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











