柯里化通过分步传参和闭包实现参数固定与配置复用,适合预设API基础路径、超时等稳定上下文,支持按业务逻辑分层“变”与“不变”,但严格从左到右收参,不支持跳位绑定。

JavaScript 函数柯里化本身不直接“固定参数”,但它天然支持配置复用——通过分步传参,让前置参数被闭包记住,后续调用自动带入,无需手动 bind 或 partial。
用柯里化预设环境或默认配置
适合 API 基础路径、超时、日志级别等稳定不变的上下文。例如:
- 封装一个带默认 baseUrl 和 timeout 的请求函数:const api = curry((baseUrl, timeout, path, method) => fetch(`${baseUrl}/${path}`, { method, signal: AbortSignal.timeout(timeout) }))
- 提前填入通用配置:const prodApi = api('https://api.example.com')(5000),得到一个只等 path 和 method 的函数
- 后续在不同组件中复用:prodApi('users')('GET')、prodApi('orders')('POST')
按业务逻辑拆解参数层级
把“变”与“不变”自然分层,让复用更直观。比如税费计算:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 原函数:calc(price, taxRate, coupon)
- 柯里化后:const calcWithTax = curry(calc)
- 固定基础价和税率:const calcVat13 = calcWithTax(100)(0.13),生成专用函数
- 不同订单可复用:calcVat13(5)(减 5 元券)、calcVat13(0)(无券)
配合调用时机灵活生成偏函数
不需要一次性决定固定哪些参数,而是在需要时随时截断调用链:
- const logError = curry(console.log)('ERROR') → 专打错误日志
- const add5 = curry((a, b) => a + b)(5) → 生成加 5 工具
- 甚至支持混合传参:curry(sum)(1, 2)(3) 或 curry(sum)(1)(2, 3),Lodash 的 _.curry 就支持这种弹性
注意:它不支持跳位绑定
柯里化严格按形参顺序从左到右收参,不能像 _.partial(fetch, _, '/login') 那样留空第一个参数、只固定第二个。如果必须跳位,建议先柯里化,再对某一层用 bind 微调,而不是放弃柯里化。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










