JS中Currying实现

什么是柯里化?

在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术
具体就是:只传递函数的一部分参数来调用它,让它返回一个函数去处理剩下的参数

例子:

function add(a,b){
  return a + b
}
// 一般执行
add(1,2) // 3

// 柯里化之后
var addCurry = curry(add);
addCurry(1)(2);  // 3

下面来实现一个curry函数

function curry(fn){
        function _c(length,args){
          return length === 0 ? 
            fn.apply(null,args) :
            function(x){
            
              return _c(length - 1,args.concat(x))
            }
        }

        return _c(fn.length,[])
      }

      // es6
      const curry = fn => {
        const _c = (length, args) => {
          return length === 0 ? 
            fn(...args) :
            x => _c(length - 1, [...args,x])
        }
        return _c(fn.length,[]);
      }

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

    var addCurry = curry(add);
    addCurry(1)(2)(3)(4); // 12

上面的curry的实现具体过程就是,首先通过fn.length取得原函数的参数长度,然后不停的判断这个长度,如果长度为0,就执行fn函数,否则长度减一,并把新传入的参数合并到args里面。

你可能感兴趣的:(JS中Currying实现)