函数柯里化是将多参数函数转换为单参数函数链的技术,通过闭包固定已传参数、分步接收余参、最终执行;本质是参数求值策略,区别于偏函数(可多参)和普通高阶函数(无参数拆解逻辑)。

画函数柯里化的思维导图,重点不在形式花哨,而在厘清“为什么需要柯里化”“它怎么工作”“和普通函数调用有何本质区别”。核心是抓住参数分步传入、返回新函数、固定部分参数这三个动作,再围绕它们展开逻辑分支。
柯里化的定义与本质
柯里化不是语法糖,而是函数式编程中一种参数求值策略:把接收多个参数的函数,转换成一系列只接收一个参数的函数链。每次调用只传一个参数,返回下一个函数,直到参数收齐才真正执行。
- 原始函数:
add(a, b, c) - 柯里化后:
add(1)(2)(3) === 6或add(1)(2)(3)等价于curry(add)(1)(2)(3) - 关键点:返回的每个中间函数都闭包保存了已传入的参数,这是实现的基础
手写柯里化函数的关键步骤
一个健壮的 curry 工具函数需处理形参长度、参数收集、递归返回、终止执行等环节:
- 用
fn.length获取原函数期望参数个数(注意箭头函数无length) - 内部递归函数接收新参数,与已存参数合并
- 参数总数 ≥ 原函数形参个数时,直接执行
fn(...args) - 否则返回新的函数,继续等待参数
- 建议用
rest 参数收集,避免arguments的兼容性问题
柯里化 vs 普通高阶函数 vs 偏函数
容易混淆的概念,导图里要横向对比:
-
偏函数(Partial Application):固定部分参数,返回一个仍可接收剩余参数的新函数,但不要求一次只传一个,例如
partial(add, 1, 2)→(c) => add(1, 2, c) - 柯里化:强制单参数、链式调用,结构更严格,天然支持函数组合(compose)
- 普通高阶函数:只是以函数为参数或返回函数,不涉及参数拆解逻辑
典型应用场景与价值
导图末端应落脚到“为什么学它”,增强记忆锚点:
- 配置复用:如
const logError = curry(console.error)('APP'),后续只传错误信息 - 事件处理器预设:如
button.addEventListener('click', handleClick(id)) - 与函数组合(
compose/pipe)配合,构建清晰的数据流 - React 中用于 props 透传或 HOC 参数预置(如
withRouter的早期模式)


















