柯里化函数通过闭包逐步累积配置对象实现灵活的多步骤配置构建,支持链式调用、显式执行(如传业务数据或调用.done())及复用组合,但需注意object.assign浅合并导致的嵌套覆盖问题。

柯里化函数实现多步骤配置构建,本质是把配置当作参数来“逐步喂给”函数,靠闭包记住已传的配置片段,最后统一合并执行。它不依赖硬编码的步骤数,也不要求一次性写全所有字段,而是让调用者按需叠加——比如先设 API 地址,再加认证 token,最后传业务数据发起请求。
用闭包累积配置对象
每次调用都返回一个新函数,内部维护一个 config 对象,新传入的配置通过 Object.assign 合并进去,而不是覆盖整个对象:
- 第一次调用传
{ baseUrl: 'https://api.example.com' },闭包记下这个值 - 第二次传
{ timeout: 5000 },合并后变成{ baseUrl: '...', timeout: 5000 } - 后续还能继续加
{ headers: { 'X-Trace': 'id123' } },只要没触发执行,就一直累积
显式触发执行,不靠参数个数判断
配置项数量不确定,没法靠 fn.length 判断是否“够了”。更可靠的方式是:最后一次调用传入业务数据(如用户 ID 或表单内容),或调用 .done()、.exec() 这类方法才真正执行:
-
api({ method: 'GET' })({ path: '/users' })({ id: 123 })→ 最后一步传{ id: 123 }触发请求 -
api({ method: 'POST' }).done({ name: 'Tom' })→ 显式调用done启动 - 避免混淆:配置参数和业务参数类型不同,可通过检查是否含
data、body或id等字段区分
注意浅合并带来的嵌套覆盖问题
Object.assign 是浅合并,如果两次都传 headers,后一次会整个替换前一次:
- 第一次:
{ headers: { Accept: 'json' } } - 第二次:
{ headers: { Authorization: 'Bearer xyz' } } - 结果:
{ headers: { Authorization: 'Bearer xyz' } }——Accept丢了 - 解决办法:约定配置结构扁平(如
authToken、acceptType单独字段),或在合并时用深拷贝+深合并工具处理嵌套对象
支持链式调用与复用组合
每一步返回的都是函数,天然支持链式写法,也方便提取中间状态复用:
const userApi = api({ baseUrl: '/api', method: 'GET' });const adminApi = userApi({ headers: { 'X-Role': 'admin' } });-
adminApi({ path: '/users' })(123);→ 复用 base + role 配置,只变路径和 ID - 多个预设组合可导出为常量,比如
publicApi、authedApi、retryApi,按场景直接取用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











