柯里化
柯里化,英语:Currying,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
可以从“拆参数、延迟执行、复用逻辑”这三个点理解柯里化(Currying)。
为什么需要柯里化
-
提高复用性
把多参数函数拆成一层层单参数函数后,可以先“固定一部分参数”,生成更专用的函数。
例如先固定税率、先固定日志前缀。 -
延迟执行(惰性)
先接收部分参数,等上下文齐了再执行,适合配置先行的场景。 -
让函数组合更自然
在函数式编程里,单参数函数更容易compose/pipe/map/filter。 -
减少重复传参
避免每次都传相同参数,代码更简洁。
常见使用场景
- 配置型 API:先传配置,再传数据
withRetry(options)(request) - 事件处理/中间件:先传上下文,再传事件
handleClick(userId)(event) - 表单校验/规则引擎:先传规则,再传输入值
minLength(8)(password) - 函数式数据处理:配合
map/filter/reduce做可组合逻辑 - 日志/埋点/权限检查:先固定模块信息,再处理具体动作
现代编程中用得多吗?
- 中等偏少(业务代码):日常 CRUD/页面开发里不会高频手写完整柯里化。
- 中等偏多(工具层/函数式风格):在工具函数库、状态管理、中间件、函数组合场景仍很常见。
- React/Vue 项目里:常见的是“局部柯里化思想”(如先传参数返回事件处理函数),而不是到处写纯 FP 风格代码。
一句话:柯里化不是“必须”,但在“参数复用 + 组合 + 延迟执行”这三类问题上非常有价值。
