函数柯里化

64 阅读1分钟

定义:柯里化(Currying)是一种将接收多个参数的函数转换为仅接收单个参数并返回新函数的技术

示例:定义一个add函数,接受三个参数,返回它们的和。定义curry函数,接受一个函数,返回一个柯里化版本函数,使用curry函数 将add函数转化为柯里化函数curriedAdd,

function add(a, b, c) {
  return a + b + c;
}

function curry(fn) {
  return function curried(...args) {
  //当传入的参数数量大于等于原函数的参数数量时,我们使用 apply 方法来执行真正的函数调用,将收集到的所有参数都传递给原函数 fn。而当传入的参数数量小于原函数的参数数量时,返回另一个新的柯里化函数,这个新函数会将当前收集到的参数和后续可能传入的其他参数一起合并,然后再次调用 curried 函数。
    if (args.length >= fn.length) {  
      return fn.apply(this, args); 
    } else {
      return function (...args2) {
        return curried.apply(this, args.concat(args2));
      };
    }
  };
}

const curriedAdd = curry(add);
curriedAdd(1)(2)(3); // 6 
curriedAdd(1, 2)(3); // 6 
curriedAdd(1)(2, 3); // 6