函数柯里化是解决重复逻辑、参数固化和流程组合的实用手段,用于日志预设、权限校验、表单验证和api请求等场景,提升代码复用性与可维护性。

函数柯里化在实际业务开发中不是炫技工具,而是解决重复逻辑、参数固化和流程组合问题的实用手段。它让“变”与“不变”更清晰,把动态传入的部分和固定配置的部分自然分离。
日志与监控函数的参数预设
项目中常需按等级(INFO/WARN/ERROR)输出日志,且每次都要传时间戳、模块名等固定字段。手动重复写很累,也容易漏。
- 定义通用日志函数:const log = (level, module, timestamp, msg) => console[level](`[${module}] [${timestamp}]: ${msg}`)
- 用柯里化生成专用函数:const errorLog = curry(log)('error')('auth'),后续只需传时间戳和消息:errorLog(new Date(), 'token expired')
- 同理可快速产出 debugApiLog = curry(log)('debug')('api'),不同模块、不同级别互不干扰
权限校验与角色判断的复用封装
前端常需做多层权限控制,比如 hasPermission(role, action, resource)。但页面中多数场景角色和资源是固定的,只有操作动作会变。
- 柯里化后:const canAdminEdit = curry(hasPermission)('admin')('edit')
- 按钮级控制变得简洁:
- 也可进一步组合:const isEditor = curry(hasPermission)(role)('write'),适配用户角色动态加载场景
表单验证规则的灵活组装
验证函数如 validate(rule, message, value),其中 rule 和 message 往往成对出现(如“必填”、“邮箱格式”),而 value 是每次输入的变量。
- 提前绑定规则:const required = curry(validate)('required')('此项为必填项')
- 在表单项中直接使用:required(inputValue) 返回 true/false 或错误对象
- 配合函数组合,还能链式验证:pipe(required, emailFormat, maxLength(50))(value)
API 请求函数的环境与配置固化
调用后端接口时,baseURL、鉴权头、超时时间等常全局一致,只有 path 和 data 变化。
- 封装基础请求函数:const request = (method, url, headers, timeout, data) => {...}
- 柯里化生成项目专属客户端:const api = curry(request)('POST')('/api')({ auth: token })
- 各业务模块调用更轻量:api(5000)({ userId: 123 }),无需再关心 method、baseURL 和 headers











