柯里化通过闭包固定部分参数,生成语义明确的专用函数:如格式化日期、预设事件处理器、串联数据清洗步骤、适配API固定签名。

柯里化能把你写的一个通用函数,变成只针对某个场景用的“小工具”,关键在于提前固定一部分参数,让剩下的调用更简洁、语义更明确。
用闭包固定配置参数
比如一个通用的格式化函数 formatDate(date, format, timezone),在某个项目里总用 'YYYY-MM-DD' 和 'Asia/Shanghai',就可以柯里化出专属版本:
- 先写通用函数:
function formatDate(date, format, tz) { /* 实现 */ } - 再柯里化:
const formatCNDate = curry(formatDate)('YYYY-MM-DD')('Asia/Shanghai'); - 后续直接用:
formatCNDate(new Date())—— 不用每次重复写格式和时区
为事件处理预设上下文
给按钮绑定点击逻辑时,常要传 ID 或类型。不用在 HTML 里写内联 handler,也不用每次手动 bind:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 通用函数:
function handleAction(id, actionType, event) { console.log(`${actionType} ${id}`); } - 柯里化生成具体处理器:
const deleteBtnHandler = curry(handleAction)(123)('delete'); - 绑定:
button.addEventListener('click', deleteBtnHandler);—— 点击时自动带入 id 和类型,event 由浏览器传入
构建可复用的数据处理管道
比如清洗用户数据:需要依次做 trim、转小写、过滤空值。把每个步骤做成单参函数,再用柯里化串联:
立即学习“Java免费学习笔记(深入)”;
const trim = s => s?.trim();const toLower = s => s?.toLowerCase();const nonEmpty = s => s && s.length > 0 ? s : null;- 组合成专用清洗器:
const cleanUsername = curry((a, b, c) => c(b(a)))(trim)(toLower)(nonEmpty); - 调用:
cleanUsername(' JOHN ') // → 'john'
适配第三方 API 的固定签名
调用像 fetch(url, options) 这类接口时,往往 base URL、headers、超时等都一样。柯里化后避免重复写:
const apiCall = curry(fetch)('https://api.example.com'); // 固定 baseURLconst getJson = apiCall({ headers: { 'Content-Type': 'application/json' } });-
getJson('/users/1').then(r => r.json());—— 每次只关心路径和业务逻辑

















