纯函数是不依赖也不修改外部状态、输入相同则输出恒定且无副作用的函数;其核心特征为确定性(仅依赖参数)和无副作用(不改变外部环境),因而更易测试、可预测、可并行执行。
纯函数是指既不依赖外部状态、也不修改外部状态的函数。它只根据输入参数返回确定结果,相同输入永远得到相同输出,且没有副作用。
1. 确定性(无外部依赖):函数内部不读取或使用任何外部变量(如全局变量、模块变量、时间、随机数等),所有数据都来自参数。
2. 无副作用(不改变外部环境):不修改传入的对象或数组,不调用 console.log、setTimeout、fetch 等外部 API,不修改 DOM,不更改全局状态。
✅ 正确示例:
const add = (a, b) => a + b;
const getFullName = (user) => `${user.firstName} ${user.lastName}`;
❌ 非纯函数示例:
let counter = 0; const increment = () => ++counter; // 依赖并修改外部变量const now = () => new Date(); // 每次调用结果不同
const logAndDouble = (x) => { console.log(x); // 副作用 return x * 2; };
测试的核心目标是验证“给定输入 → 是否得到预期输出”。纯函数天然契合这一目标,因为它的行为完全可预测、可隔离。
ock 时间、API、数据库或全局状态,直接传参断言结果即可不是所有函数都能或都需要写成纯函数,但关键逻辑(如数据转换、计算、校验)尽量保持纯净,能显著提升可维护性。
它不能替代异步、状态管理或 UI 渲染,但在业务逻辑层、工具函数、reducer、selector 等场景中,坚持纯函数原则会让代码更可靠、更易理解和协作。测试不再是“碰运气”,而是真正成为质量的守门人。