# 柯里化函数 Currying Function

​ 柯里化是把接受多个参数的函数变换成接受一个 单一参数的函数 并且返回接受余下的参数而且返回结果的新函数的技术

# 柯里化函数衍化

  • 通过一个函数实现三个数的累加

    function add(a, b, c) {
      return a + b + c;
    }
    add(11, 22, 33);
    
    1
    2
    3
    4
  • 通过 柯里化函数 实现

    curryAdd(11)(22)(33);
    
    1
  • 我们需要将普通函数 add() 变为 柯里化函数 curryAdd()

    function add(a, b, c) {
      return a + b + c;
    }
    
    // add(11, 22, 33);
    
    // 自动变为柯里化函数
    function curryFn(fn) {
      function recordFn(...argus) {
        if (argus.length >= fn.length) {
          return fn(...argus);
        } else {
          return function (...newArgus) {
            return recordFn(...argus.concat(newArgus));
          };
        }
      }
      return recordFn;
    }
    
    let CurryAdd = curryFn(add);
    
    CurryAdd(11)(22)(33);
    CurryAdd(11, 22)(33);
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
  • 柯里化弊端 因为使用闭包 所以 浪费内存