Skip to content

柯里化

定义

柯里化Currying是一种将接收多个参数的函数转换为接收一个参数的函数,并返回接收下一个参数的新函数的技术。简单来说,柯里化是将多元函数转换为一系列一元函数(每个函数只接受一个参数)的过程。

柯里化的意义:

1、让纯函数更纯,每次接受一个参数,松散解耦

2、惰性执行

作用

1、参数复用:可以将某些固定的参数提前传入,生成一个新的函数,剩下的参数可以在稍后调用时再传递

2、延迟计算:将函数调用分成多个步骤,逐步传入参数,最终才执行

3、代码复用:通过柯里化,可以产生更灵活和可复用的函数

示例

js
let fn = (x, y) => x + y;

// 转化

const curry = function (fn) {
  return function (x) {
    return function (y) {
      return fn(x, y);
    };
  };
};

let myfn = curry(fn);
console.log(myfn(1)(2));

// 多参数
const curry = function (fn) {
  return function curriedFn(...args) {
    if (args.length < fn.length) {
      return function () {
        return curriedFn(...args.concat([...arguments]));
      };
    }
    return fn(...args);
  };
};
const fn = (x, y, z, a) => x + y + z + a;
const myfn = curry(fn);
console.log(myfn(1)(2)(3)(1));