柯里化是将多参函数转为单参函数链的过程,通过闭包实现,提升函数灵活性、复用性、组合性及配置化封装能力,广泛应用于函数式编程与React开发。
柯里化(Currying)是将一个接收多个参数的函数,转换为一系列只接收一个参数的函数链的过程。在 JavaScript 中,它不是语言原生特性,但可通过闭包轻松实现。
柯里化后,函数可以“预设”部分参数,生成新函数供后续调用。比如处理不同单位的长度转换:
convert('m', 'cm', 1.5)
const mToCm = convert('m')('cm'); mToCm(1.5);
这样写出来的代码更清晰,也更容易组合和复用。
柯里化函数天然适配函数式编程中的组合(compose)或管道(pipe)。例如用 Ramda 或自定义工具时:
const add = a => b => a + b
;const multiply = a => b => a * b;const addThenMultiply = pipe(add(2), multiply(3));addThenMultiply(4); // (4 + 2) * 3 = 18每个函数只接收一个参数,才能被无缝串联。
柯里化常用于创建“配置即函数”的模式,比如日志、请求、校验等场景:
const logWithPrefix = prefix => msg => console.log(`[${prefix}] ${msg}`);const errorLog = logWithPrefix('ERROR');errorLog('Network timeout');相当于把通用逻辑(加前缀)和具体配置('ERROR')分离,提升可维护性。
在 React 中,柯里化常见于 HOC(高阶组件)或自定义 Hook 的参数预设:
const withLoading = loadingText => Component => props => { /* 渲染带 loading 的组件 */ };const WithLoadingSpinner = withLoading('加载中...')(MyComponent);这种写法比一次性传所有参数更直观,也利于按需导出不同配置的版本。
基本上就这些。柯里化不是炫技,而是让函数职责更单一、调用更自然的一种实用技巧。