科里化(难)

这是我自己写的

 function add(a, b) {
       return a + b;
   }
   // 假设有一个 curry 函数可以做到柯里化
   function curry(fn) {
       return function (a) {
           return function (b) {
               return fn(a, b)
           }
       }
   }
   var addCurry = curry(add);
   console.log(addCurry(1))
   console.log(addCurry(1)(2))
   addCurry(1)(2) // 3

他们是这么写的,这个难点在于一开始的函数参数个数是不确定的,所以只能用arguments来截取这样子

var curry = function (fn) {
    var args = [].slice.call(arguments, 1);
    return function() {
        var newArgs = args.concat([].slice.call(arguments));
        return fn.apply(this, newArgs);
    };
};

你可能感兴趣的:(科里化(难))