柯里化函数是将多参数函数转换为一系列单参数函数,通过闭包预置参数并延迟执行,支持占位符、上下文绑定及缓存优化,适用于API封装等场景。

柯里化函数的核心是把一个接收多个参数的函数,转换成一系列每次只接收一个参数的函数。动态生成定制化函数,关键在于“按需预置参数”和“延迟执行”,而不是写死逻辑。
用闭包捕获预设参数
最直接的方式是利用闭包保存已传入的参数,返回新函数等待剩余参数:
- 每次调用都返回一个新函数,该函数记住之前传入的参数(用数组或 arguments-like 结构暂存)
- 当累积参数数量达到原函数期望的总参数个数时,自动触发执行
- 示例:实现通用 curry 工具函数
const arity = fn.length;
return function curried(...args) {
if (args.length >= arity) return fn(...args);
return (...rest) => curried(...args, ...rest);
};
}
支持占位符与灵活参数顺序
真实场景中常需跳过某些参数(如用 _ 占位),这时不能只靠参数长度判断,得显式标记“未完成”状态:
- 引入占位符(如 _),遇到它就留空,不计入已提供参数计数
- 内部维护一个“参数槽位数组”,填满后再执行
- 可结合 Symbol 或唯一对象做占位符,避免字符串冲突
按需绑定上下文与重用逻辑
定制化不仅指参数,还包括 this 绑定和复用策略:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 用 Function.prototype.bind 可快速实现部分绑定,但无法动态调整占位符
- 若需保持 this 上下文(比如用于 class 方法),应在闭包中显式保存 this 或用箭头函数规避
- 对高频调用场景,可缓存已生成的定制函数,避免重复构造
实际定制化例子:API 请求封装
比如封装 fetch,固定 base URL 和 headers,动态传入 path 和 body:
const api = curry((baseUrl, headers, path, body) =>fetch(`${baseUrl}${path}`, { method: 'POST', headers, body })
);
// 生成专用函数
const githubApi = api('https://api.github.com')({ Accept: 'application/vnd.github.v3+json' });
const createIssue = githubApi('/repos/owner/repo/issues');
这样每层调用都在构建更具体的函数,语义清晰、可组合、易测试。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










