(六)柯里化

79 阅读2分钟

1.什么是柯里化

将多参数函数转换为单参数函数,并返回一个新函数,新函数接收一个参数,并返回一个新函数,直到将参数传递完毕。这个 过程 为柯里化。
也就是foo(1, 2, 3) => foo(1)(2)(3)

2.柯里化函数作用

主要目的是为了实现参数复用和创建可复用的函数

参数复用 !!!最主要功能

不同上下文使用相同参数,不必重复调用

// 如下,不用每次add(5, 6)
function add(x) {
  return function (y) {
    return x + y;
  };
}

function add2(x, y) {
  return x + y;
}


const add5Fn = add(5);

console.log(add5Fn(6)); // 11

console.log(add2(5, 6)); // 11

创建可复用函数

每次调用可以保存执行函数的过程

function foo(x) {
  // 该函数负责将 x + 2
  x = x + 2;
  
  return function (y) {
    // 该函数负责将 y * 2
    y = y * 2;
    
    return function (z) {
      // 该函数负责将 z * z
      z = z * z;

      return function () {
        // 该函数负责将上几个函数结果相加
        return x + y + z;
      };
    };
  };
}

console.log(foo(1)(2)(3)()); //16

延迟执行

等到所有参数都准备完毕在执行函数

3.柯里化函数实现

function currying(fn) {

  function curried(...args) {
    if (args.length >= fn.length) {
      return fn.apply(this, args);
    } else {
      return function (...args2) {
        return curried.apply(this, [...args, ...args2]);
      };
    }
  }
  
  return curried;
}

使用方式如下

function sum(num1, num2, num3) {
  return num1 + num2 + num3;
}

const currySum = currying(sum);

console.log(currySum(1)(2)(3)); //6

console.log(currySum(1, 2)(3)); //6

console.log(currySum(1, 2, 3)); //6

4.柯里化函数和函数组合的区别

函数柯里化是将多参数的函数转化为一系列接受单一参数的函数,目的是为了实现参数复用和创建可复用的函数
函数组合是将多个函数组合成一个新的函数,目的是为了实现函数的 模块化可组合性
它们分别关注于函数的参数处理和函数的组合关系。