柯里化是通过闭包分步传参并记忆已传参数,待参数齐备后执行;支持单个或多个参数传递,核心在于复用、缓存与业务逻辑解耦。

柯里化不是“把参数拆开随便传”,而是让函数能记住已传的参数,等后续参数到位再统一计算。关键在“分步”不等于“随意”,而是一次传一个、每次返回新函数、所有参数齐了才真正执行。
分步传参的本质是闭包保存中间状态
比如普通加法:add(2, 3) 一步出结果;柯里化后变成 add(2)(3):
- 第一次调用 add(2),不计算,只返回一个内部函数,这个函数“记得”a = 2;
- 第二次调用那个返回的函数并传入 3,这时才用 2 + 3 得到结果。
这个“记得”靠的就是闭包——内部函数持续访问外部作用域里的变量,哪怕外层函数早已执行完毕。
参数不是必须一个一个传,但逻辑上是分阶段确定的
实际使用中,你可以:
- 一次传一个:calc(100)(0.13)(5)
- 一次传多个(如果柯里化工具支持):calc(100, 0.13)(5) 或 calc(100)(0.13, 5)
只要最终凑够原函数所需的参数个数(看 fn.length),就自动执行。分步的意义在于:前几步的结果可复用、可缓存、可提前绑定,比如 calc(100) 可以反复用于不同税率和优惠券。
分步的价值体现在组装和复用场景里
真实开发中,分步不是为了炫技,而是解决参数来源分散的问题:
- 基础价格可能来自表单输入
- 税率可能来自用户地区配置
- 优惠券可能来自促销活动模块
用柯里化就能把它们自然串起来:withPrice(199)(getTaxRate())(getCoupon()),每一步都清晰对应业务含义,也方便单独测试或替换某一段逻辑。
它不复杂但容易忽略细节:参数数量判断靠 fn.length,this 绑定要保留,多次调用之间不能互相污染——这些才是写好柯里化函数的关键。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











