纯函数是函数式编程的地基,要求相同输入必得相同输出且无副作用。它提升可测试性、可缓存性、并发安全性,并支持引用透明。
JavaScript 中的函数式编程,不是指用 JavaScript 写 Haskell,而是用一套可预测、易组合、少出错的思维方式来组织函数逻辑。其中最基础、最关键的概念就是纯函数。
一个函数要被称为纯函数,必须同时满足:
✅ 正确示例:
const add = (a, b) => a + b; const square = x => x * x; const isValidEmail = email => /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email);
这些函数只看参数,只算结果,不碰外面一寸土地。
❌ 常见反例:
let ta
xRate = 0.1; const calcTax = price => price * taxRate; → 依赖外部变量,taxRate 变了结果就变;const pushItem = (arr, item) => { arr.push(item); return arr; }; → 修改了原数组,破坏了输入;const logAndDouble = x => { console.log(x); return x * 2; }; → 控制台输出是可观察副作用;const now = () => new Date(); → 每次调用时间不同,输出必然不同。它带来的实际好处很实在:
add(2, 3),都可以直接替换成 5,程序行为不变。基本上就这些。纯函数不是银弹,但它是函数式编程的地基——不复杂,但容易忽略。