函数柯里化是将多参数函数转换为一系列单参数函数的技术,通过闭包暂存参数、分步传入、凑齐原函数所需参数个数后才执行,支持灵活复用与延迟调用。

函数柯里化,说白了就是「分步传参、延迟执行」——就像点外卖时,不急着一次性填完地址、菜品、口味、支付方式,而是先选餐厅(固定一部分参数),再挑主食(再固定一个),最后加备注(补全剩余),等所有信息齐了才真正下单。
它不是拆函数,是让函数更会“记事”
柯里化不改变原函数逻辑,也不立刻运行它。它的关键是用闭包把每次传进来的参数悄悄存起来,等凑够原函数需要的参数个数,才一口气把所有已存参数交给原函数去算结果。
- 比如 add(a, b, c) 需要 3 个数相加,柯里化后变成 add(1)(2)(3) 或 add(1)(2, 3) 甚至 add(1, 2)(3) ——怎么传都行,只要最终参数总数达标
- 中间每一步返回的都是新函数,不是结果,所以你可以中途停下,把 add(5) 存成 addFive,以后反复用
核心就三点:固定、暂存、凑齐才动
它靠三个动作完成整个过程:
- 固定:第一次调用时传的参数,会被“钉住”,后续调用都默认带上
- 暂存:用闭包把已传参数保存在内存里,不丢失、不污染全局
- 凑齐才动:通过 fn.length 知道原函数要几个参数,只在数量满足时才真正调用 fn.apply()
为什么值得用?因为它让函数变“可配置”了
普通函数像一把固定尺寸的钥匙,只能开一把锁;柯里化后的函数像一套模块化钥匙片——你可以先装上「用户ID」片,再插进「操作类型」片,最后拧动「时间戳」片,组合出任意具体行为。
- 常见用途:封装 API 请求(固定 base URL 和 token)、生成事件处理器(先定事件名,再定元素,最后定回调)、做表单校验(先设规则,再喂数据)
- 和“部分应用”很像,但更严格:柯里化要求每次只传一个参数(或任意个,但必须逐步累积),而部分应用可以一次传多个


















