函数柯里化是一种将接受多个参数的函数转换成一系列接受单个参数的函数的技术。在JavaScript中,可以使用闭包和函数的递归调用来实现函数柯里化。
以下是一个使用闭包实现函数柯里化的例子:
function curry(func) {
return function curried(...args) {
if (args.length >= func.length) {
return func.apply(this, args);
} else {
return function(...args2) {
return curried.apply(this, args.concat(args2));
}
}
};
}
这个curry函数接受一个函数作为参数,并返回一个新的函数。新的函数可以接受任意数量的参数,并将它们存储在一个数组中。当存储的参数数量达到原始函数的参数数量时,新的函数调用原始函数并返回结果。否则,它返回另一个新的函数,该函数继续接受更多的参数。
使用这个函数柯里化的例子:
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
这里,我们首先定义了一个接受三个参数的add函数。然后,我们使用curry函数将它转换成一个接受一个参数的函数。最后,我们使用新的函数来调用add函数,并传递三个参数。
关键词: