Skip to content

Latest commit

 

History

History
45 lines (31 loc) · 1.05 KB

柯里化.md

File metadata and controls

45 lines (31 loc) · 1.05 KB

柯里化

把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

意义

  • 让人们将关注的重点聚焦到函数本身,而不因冗余的数据参数分散注意力,单一参数的纯函数是最简单的,目的单纯、职责单一、灵活且通用
  • 减少耦合增强其可维护性

缺点

  • 过度使用会占用较大的堆栈空间
  • 经过柯里化之后,函数的通用性有所降低,但是适用性有所提高

实现

// 手写柯里化

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

function curry(fn) {
  return function curryFun(...args) {
    if (args.length < fn.length) {
      return function () {
        return curryFun([...args, ...arguments]);
      };
    }
    return fn(...args);
  };
}

const curried = curry(add);

const a = curried(1)(9)(3);
const b = curried(2, 8)(6);

console.log({ a, b });

参考