柯里化函数

160 阅读1分钟

介绍

  • 当一个函数有多个参数时先传递一部分参数调用它

  • 然后返回一个新函数接收剩下参数,返回结果

lodash中的柯里化函数

const _ = require('lodash') 
function getSum (a, b, c) { return a + b + c }
// 柯里化后的函数 
let curried = _.curry(getSum) 

curried(1, 2, 3) 
curried(1)(2)(3) 
curried(1, 2)(3)

实现原理

利用 bind方法返回的函数来接收参数

function sum(a,b,c){
 return a+b+c
}
// 模拟柯里化函数
function curry(fn){
  return function br(){
    let length = fn.length;
    if (arguments.length>=length ){
      return fn.apply(fn, arguments);
    }else{
      return br.bind(null, ...arguments);
    }
  }
}

let curried = curry(sum);

console.log(curried(1)(2)(3));
console.log(curried(1,2)(3));
console.log(curried(1, 2,3));

作用

  • 把多元函数转化成一元函数
  • 柯里化可以让我们传递一部分参数给函数,得到一个已经"缓存"了某些固定参数的新函数
  • 让函数变得灵活,函数粒度更小