纯函数是函数式编程的基石,指相同输入恒得相同输出且无副作用的函数;它提升可测试性、缓存性、调试性、并发安全性与重构信心,实践中需隔离副作用、组合纯函数、善用高阶函数与柯里化。
JavaScript 可以自然地支持函数式编程,关键在于避免副作用、用纯函数组织逻辑、把函数当值来传递和组合。纯函数是函数式编程的基石,它让代码更可预测、易测试、易调试,也更容易做并发和缓存优化。
纯函数满足两个条件:
- 相同输入,永远返回相同输出(不依赖外部状态,比如全局变量、Date.now()、Math.random());
- 不产生副作用(不修改传入参数、不改写全局变量、不发请求、不操作 DOM、不调 console.log)。
✅ 正确示例:
const add = (a, b) => a + b;❌ 非纯函数示例:
let counter = 0;不是要完全抛弃命令式写法,而是有意识地提取纯逻辑、隔离副作用、组合小函数:
{...user, age: user.age + 1};const addX = x => y => x + y; const add5 = addX(5);。这些不是理论优势,而是日常开发中能立刻感受到的收益:
JavaScript 允许任何写法,所以函数式是选择,不是强制。真实项目中,I/O、用户交互、状态管理必然含副作用。关键是:
- 把计算逻辑抽成纯函数(比如格式化、校验、转换);
- 让副作用集中、显式、可控(比如统一放在 useEffect、事件回调或 service 层);
- 利用工具辅助识别非纯行为(如 ESLint 插件 eslint-plugin-functional)。