一、函数柯里化:
是一种高阶函数技术,它将一个多参数函数转换为一系列单参数函数的链式调用。
核心概念
定义:将一个函数 f(a, b, c) 转换为 f(a)(b)© 的形式
**本质:**通过闭包保存参数,实现分步传参
关键特征:每次调用只接收一个参数,返回新函数或最终结果
二、实现方法
1、基础柯里化(固定参数)
function curry(fn) {return function curried(...args) {if (args.length >= fn.length) {return fn.apply(this, args);} else {return function(...nextArgs) {return curried.apply(this, args.concat(nextArgs));}}};
}// 使用示例
const sum = (a, b, c) => a + b + c;
const curriedSum = curry(sum);console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3)); // 6
2、无限参数柯里化
function infiniteCurry(fn) {return function curried(...args) {return (...nextArgs) => nextArgs.length ? curried(...args, ...nextArgs) : fn(...args);};
}// 使用示例
const add = infiniteCurry((...nums) => nums.reduce((a, b) => a + b, 0));console.log(add(1)(2)(3)(4)()); // 10
console.log(add(1, 2)(3)()); // 6
三、核心作用
参数复用:固定常用参数,生成专用函数。
延迟执行:分阶段收集参数,在需要时触发计算。
函数组合:创建可管道化的函数单元。
动态功能生成:基于配置创建定制函数。
四、典型使用场景
数据验证:创建可复用的验证规则链
API请求封装:预配置基础URL/headers
数据处理管道: 组合map/filter/reduce操作
配置化UI组件 :生成带预设样式的组件工厂
数学计算:创建特定计算器(如税率计算器)
实践建议
优先用于参数明确固定的场景
避免过度柯里化导致调用链过长(>5级)
配合TypeScript使用增强类型安全
在性能敏感场景测试开销(多次闭包创建)