柯里化是将多参函数转换为一系列单参函数的过程,每次调用返回新函数并利用闭包固化已传参数,直至集齐所有参数才执行原逻辑;其核心在于闭包保存与length判断。

柯里化(Currying)是将一个接收多个参数的函数,转换为一系列只接收一个参数的函数的过程。它不是简单地“分次传参”,而是每次调用都返回一个新的函数,直到收集齐所有参数后才真正执行原逻辑。
柯里化的本质:参数逐步固化
比如原函数 add(a, b, c),柯里化后变成 add(a)(b)(c)。关键在于:每一步都“记住”已传入的参数,形成闭包环境。
- 第一次调用
add(1)返回一个新函数,内部记住了a = 1 - 第二次调用
(2)记住b = 2,再返回一个函数 - 第三次调用
(3)拥有全部参数,执行加法并返回结果6
手动实现一个通用柯里化函数
核心思路是利用闭包保存已传参数,并通过函数的 length 属性判断是否达到原函数期望参数个数:
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 add = (a, b, c) => a + b + c;<br> const curriedAdd = curry(add);<br> curriedAdd(1)(2)(3); // 6<br> curriedAdd(1, 2)(3); // 6<br> curriedAdd(1)(2, 3); // 6
登录后复制
在函数式编程中的典型应用
柯里化本身不改变功能,但极大提升了函数的可复用性与组合能力:
标签: javascript java app 工具 amd
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~