函数柯理化

function add() {
  let args = Array.prototype.slice.call(arguments)
  let add1 = function() {
    args = args.concat([...arguments])
    return add1
  }
  add1.toString = function() {
    return args.reduce((a, b) => { return a+b})
  }
  return add1
}
function curry(fn,...args){
  return args.length<fn.length? (...arguments)=>curry(fn,...args,...arguments) : fn(...args)
}

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

var add1 = curry(add);
add1(1)(2)(3);
原文地址:https://www.cnblogs.com/Mcrown/p/14442038.html