定义
函数柯里化(currying)是一种将多参数的函数转化为一系列单参数函数的技术。具体来说,它可以将一个接收多个参数的函数转化为接收单一参数的函数,并且返回接收余下参数且返回结果的新函数。例如将乘法运算 multiply(a, b, c) 的调用方式转换为 multiply(a)(b)(c) 的调用方式。
const a = b = c = 2;
// 普通函数
var multiply = (a, b, c) => {
return a * b * c;
}
multiply(a, b, c); // 输出 8
// 模拟 - 函数柯里化
var multiply = (a) => (b) => (c) => a * b * c;
multiply(a)(b)(c); // 输出 8
实现
// 实现 - 函数柯里化
function currying(fn, ...args) {
if (args.length >= fn.length) {
return fn(...args); // 参数长度与fn的参数长度一致开始计算
} else {
return (...args2) => {
return currying(fn, ...args, ...args2); // 递归调用
};
}
}
// 使用
function add(x, y) {
return x + y;
}
const curryAdd = currying(add);
const result = curryAdd(1, 2);
console.log(result); // 输出 3