柯里化函数通过固定部分参数返回新函数来预留上下文,需结合函数组合(如pipe)实现多步数学计算;示例包括add、multiply、round等柯里化操作,再用pipe串联执行。

柯里化函数本身不直接“组合”计算步骤,而是通过固定部分参数、返回新函数的方式,为后续调用预留上下文。真正实现多步数学计算的组合,需要把柯里化和函数组合(function composition)结合起来——先柯里化基础运算,再用组合方式串起来。
用柯里化封装单个数学操作
比如加法、乘法、取整等,可写成柯里化形式,让每个函数只接收一个参数,便于后续串联:
// 柯里化加法:add(3)(5) → 8 const add = a => b => a + b; <p>// 柯里化乘法:multiply(2)(10) → 20 const multiply = a => b => a * b;</p><p>// 柯里化取整:round(2)(3.14159) → 3.14 const round = precision => num => Number(num.toFixed(precision));
用组合函数串联多个柯里化步骤
定义一个简单的右向组合函数(类似 compose 的反向),让计算从左到右执行:
const pipe = (...fns) => x => fns.reduce((acc, fn) => fn(acc), x); <p>// 示例:先加 5,再乘以 2,最后保留 1 位小数 const calculate = pipe( add(5), // x → x + 5 multiply(2), // x → x * 2 round(1) // x → Number(x.toFixed(1)) );</p><p>calculate(3); // ((3 + 5) * 2).toFixed(1) → "16.0"
避免手动传参,让每步自然衔接
关键在于:所有柯里化函数都设计为单参数输入、单参数输出,这样 pipe 才能自动把上一步结果传给下一步。如果某步需要多个参数,必须提前柯里化好(比如 add(5) 已固化第一个加数):
立即学习“Java免费学习笔记(深入)”;
- 不要写
add(a, b),而要写add(a)(b)或add(a)返回函数 - 像
Math.pow可柯里化为pow(base)(exponent),若固定 base 就变成单输入函数 - 遇到需多参但又想组合的情况(如 min/max),可用占位符或预设值,例如
min = a => b => Math.min(a, b),再用min(10)得到“小于等于 10”的过滤函数
实际数学流程举例:温度转换+格式化
把华氏转摄氏、四舍五入、加单位,全用柯里化+pipe 实现:
const fahrenheitToCelsius = f => (f - 32) * 5 / 9;
const toCelsius = f => fahrenheitToCelsius(f);
const round1 = round(1);
const addUnit = c => `${c}°C`;
<p>const convertAndFormat = pipe(
toCelsius,
round1,
addUnit
);</p><p>convertAndFormat(68); // "20°C"


















