柯里化(Currying)是一种将接受多个参数的函数转换为一系列接受一个参数的函数的过程。这使得函数更具通用性,更易于组合。在 JavaScript 中,你可以手动实现柯里化来实现这种转换。以下是一个示例
function curry(fn) {
return function curried(...args) {
// 检查当前传入的参数数量是否已达到原函数的参数数量
if (args.length >= fn.length) {
// 如果参数数量足够,执行原函数 fn 并返回结果
return fn(...args);
} else {
// 如果参数数量不足,返回一个新的函数,等待更多的参数
return function (...moreArgs) {
// 将当前参数 args 和新参数 moreArgs 合并
return curried(...args.concat(moreArgs));
};
}
}
function add(a, b, c) {
};
return a + b + c;
}
const curriedAdd = curry(add);
console.log(curriedAdd(1)(2)(3)); // 输出: 6
console.log(curriedAdd(1, 2)(3)); // 输出: 6
console.log(curriedAdd(1)(2, 3)); // 输出: 6
console.log(curriedAdd(1, 2, 3)); // 输出: 6
在上述代码中,curry 函数接受一个函数 fn,并返回一个柯里化后的函数 curried。curried 函数检查当前传入的参数数量是否足够执行原函数 fn。如果足够,执行 fn 并返回结果;如果不足够,返回一个新的函数,等待更多参数。这允许你逐个传递参数或一次性传递所有参数,并根据参数数量动态构建函数链。这是柯里化的核心概念。