柯里化是将多参函数转为单参函数链的过程,通过闭包累积参数、延迟求值,核心为固定参数+返回函数链;示例curry函数基于fn.length判断参数是否齐备,支持多种调用方式。
柯里化(Currying)是将一个接收多个参数的函数,转换为一系列只接收一个参数的函数的过程。每次调用返回一个新的函数,直到收集齐所有参数,才真正执行原函数。
它不是简单地“分次传参”,而是通过闭包保存已传入的参数,逐步累积,最终触发计算。关键在于:固定部分参数 + 延迟求值 + 返回函数链。
下面是一个通用、可复用的 curry 工具函数:
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));
};
}
};
}说明:
原始函数:
function add(a, b, c) {
return a + b + c;
}柯里化后使用方式:
const curriedAdd = curry(add); console.log(curriedAdd(1)(2)(3)); // 6 console.log(curriedAdd(1, 2)(3)); // 6 console.log(curriedAdd(1)(2, 3)); // 6
三种写法都有效,因为内部做了参数合并逻辑。
真实项目中需考虑更多边界情况:
ry,需额外解析参数中的占位标识不复杂但容易忽略