柯里化是将多参数函数转换为单参数函数序列的过程,通过闭包分步收集参数并延迟执行,参数数量由fn.length决定,传齐后才调用原函数。

柯里化就是把一个原本接收多个参数的函数,变成每次只收一个参数、返回新函数、直到所有参数到位才真正执行的过程。它不是简单切分参数,而是靠闭包记住前面传入的值,让调用节奏更贴近业务实际——比如先定规则,再填数据,最后触发动作。
它本质是“参数分步收集 + 延迟执行”
原始函数 add(a, b, c) 一次性要三个数;柯里化后变成 add(a)(b)(c),每一步只处理一个输入:
- 第一次传 a,返回一个“记住了 a”的函数
- 第二次传 b,这个函数又记住 b,再返回一个“记住了 a 和 b”的函数
- 第三次传 c,参数凑齐,立刻调用原始逻辑 a + b + c 并返回结果
关键靠闭包保存中间状态
每次返回的新函数都能访问外层作用域中已传的参数,这不是临时变量或全局缓存,而是 JavaScript 天然支持的闭包机制:
FastAPI + Flask 混合部署最佳实践,解决路由定义、API 代理等常见问题,适用于同时运行 FastAPI API 与 Flask 前端的场景。
- 没有显式数组存储,但每次调用都在内部形成一层作用域链
- 参数不会丢失,也不会被后续调用覆盖
- 同一个柯里化函数多次调用,各自独立,互不干扰
参数数量由原函数决定,不能跳过
一个靠谱的柯里化实现会读取原函数的 fn.length 属性来判断需要几个参数:
- 传得不够,继续返回函数等待下一个
- 传得刚好,立即执行并返回结果
- 传多了,多余参数通常被忽略(也可按需处理)
- 不能乱序,也不能省略中间某一个——这是柯里化和偏函数的本质区别
它解决的是“什么时候固化、什么时候执行”的问题
不是为了写得短,而是让函数更贴合使用场景:
- 固定配置项:比如 httpRequest(baseUrl)(timeout)(method),先把域名定死,后面按需传超时和请求方式
- 生成专用函数:如 add10 = add(10),之后直接 add10(5) 得到 15
- 配合事件处理:按钮点击时只传 event,其他参数早已固化好










