JavaScript 从浅入深 100 题训练计划--(7)柯里化(Curry)
function add(a, b, c) { return a + b + c; }
const curriedAdd = curry(add);
curriedAdd(1)(2)(3) // 6
curriedAdd(1, 2)(3) // 6
柯里化:柯里化(Currying)是一种将多个参数的函数转换为一系列单参数函数的技术。简单说就是:把 f(a, b, c) 变成 f(a)(b)(c) 的形式。
核心思想:柯里化不会调用函数,而是对函数进行转换,返回一个可以逐步接收剩余参数的新函数。
function add(a, b, c) { return a + b + c }
function curry(a) {
return function (b) {
return function (c) {
return a + b + c;
}
}
}
console.log(curry(1, 2)(3), 'curry')
function curry(fn) {
return function curried(...args) {
console.log(args.length, fn.length, 'curried')
if (args.length >= fn.length) {
return fn.apply(this, args)
}
return function (...nextArgs) {
return curried.apply(this, args.concat(nextArgs))
};
}
}
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

浙公网安备 33010602011771号