JavaScript 纯函数
什么是纯函数?
在函数式编程中,纯函数是 一个核心概念。简单来说,纯函数是一种特殊类型的函数,它具有两个主要特征:
- 确定性:给定相同的输入,总是返回相同的输出
- 无副作用:函数执行过程中不会修改外部状态或产生可观察的副作用
备注
副作用包括:修改全局变量、修改传入的参数、进行I/O操作(如文件读写、网络请求)、DOM操作等。
纯函数的特点
1. 可预测性
纯函数的结果仅由其输入参数决定,不依赖于任何外部状态,这使得函数行为完全可预测。
// 纯函数
function add(a, b) {
return a + b;
}
// 调用多次,结果始终相同
console.log(add(2, 3)); // 输出: 5
console.log(add(2, 3)); // 输出: 5
2. 可测试性
由于纯函数的输出只依赖于输入,所以测试变得简单直接,不需要模拟复杂的环境。
3. 可缓存性
纯函数的结果可以被缓存,因为相同的输入总是产生相同的输出。
// 使用闭包实现一个简单的记忆化函数
function memoize(fn) {
const cache = {};
return function(...args) {
const key = JSON.stringify(args);
if (!cache[key]) {
cache[key] = fn(...args);
}
return cache[key];
};
}
// 计算斐波那契数列的纯函数
function fibonacci(n) {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
// 记忆化版本
const memoFibonacci = memoize(fibonacci);
console.time('Without memoization');
fibonacci(35);
console.timeEnd('Without memoization'); // 显著较慢
console.time('With memoization');
memoFibonacci(35);
console.timeEnd('With memoization'); // 显著较快
4. 可并行执行
因为纯函数不依赖共享状态且没有副作用,所以多个纯函数可以安全地并行执行。