JavaScript中两数相加的柯里化函数将add(a,b)转为add(a)(b),核心是闭包记忆首参;支持链式调用需重写toString/valueOf,通用双参写法为const add = a => b => a + b。

在 JavaScript 中,两数相加的柯里化函数就是把 add(a, b) 拆成 add(a)(b) 的形式。核心是让第一次调用返回一个函数,该函数记住第一个参数,并等待第二个参数传入后执行相加。
基础实现(固定两个参数)
最简方式是直接返回一个闭包函数:
function add(a) {
return function(b) {
return a + b;
};
}
// 使用:
console.log(add(2)(3)); // 5
支持链式调用和直接求值
为了让函数既能 add(2)(3),也能 add(2, 3) 或 add(2)(3)(4)(扩展性),可以利用函数的隐式转换(toString / valueOf)来触发最终计算:
function add(a) {
const curried = function(b) {
return add(a + b);
};
curried.toString = () => a;
curried.valueOf = () => a;
return curried;
}
// 使用:
console.log(add(2)(3)); // 5
console.log(+add(2)(3)); // 5(强制转数字)
console.log(add(1)(2)(3)); // 6
更通用的双参数柯里化写法
如果只想严格支持两个参数、不扩展,又希望写法清晰可读,可以用箭头函数简化:
const add = a => b => a + b; // 使用: console.log(add(4)(9)); // 13
注意事项
- 柯里化 ≠ 部分应用:柯里化是固定参数数量、逐层接收单个参数;部分应用可一次传多个或不传满。
- 上述
toString/valueOf方案依赖隐式类型转换,在需要明确数值结果时推荐显式调用,比如Number(add(2)(3))。 - 生产环境若需健壮性,建议加参数类型检查(如
typeof a === 'number')。


















