Skip to content

柯里化函数

February 8, 2023 | 05:45 PM

柯里化函数

前言

柯里化函数指的是将一个多参数的函数拆分成一系列函数,每个拆分后的函数都只接受一个参数

他的实现思想无不展现出闭包+递归的魅力

例如:

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

add(1, 1) // 2

上面代码中,函数add接受两个参数ab

柯里化就是将上面的函数拆分成两个函数,每个函数都只接受一个参数。

function add (a) {
  return function (b) {
    return a + b;
  }
}
// 或者采用箭头函数写法
const add = x => y => x + y;

const f = add(1);
f(1) // 2

上面代码中,函数add只接受一个参数a,返回一个函数f。函数f也只接受一个参数b

image.png

柯里化函数的优势

  • 可以大量的进行函数的复用,减少代码量
  • 使代码看上去更优雅
  • 针对函数的参数进行优化

手撕柯里化函数

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

function MyCurrying(fn, ...items) {
 if (fn.length == items.length) { 
    let res=fn(...items)
    return res;
  }
   //返回一个闭包
  return (...rests) => {
 	 return  MyCurrying(fn, ...items, ...rests);
  };
}

let addCurry = MyCurrying(add);
console.log(
addCurry(1)(2,4),  //7
addCurry(9)(10)(10) //29
);