编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
function mjyCurrying(fn) {
  function curried(...args) {
    console.log(args)
    // 如果参数第一步就传递够了
    if ( args.length >= fn.length ) {
      // 有可能在调用的时候需要改变this指向,我们这里用进行this的绑定
      return fn.call(this, ...args)
    } else {
      // 参数不够,需要返回一个新的参数,继续来接收剩余的参数(对curried进行回调)
      function callback_curried(...args2) {
        return curried.call(this, ...args, ...args2)
      }
      return callback_curried
    }
  }
  return curried
}


function currify(fn){
    function curried(...args){
        if(args.length >= fn.length){
            return fn.call(this,...args)//返回fn的结果
        }else{
            function callback_curried(...args2){
                return curried.call(this,...args,...args2)//返回fn的结果
            }
            return callback_curried//返回一个用来接受新参数的函数
        }
    }
    return curried
}



function add(a,b,c,d){
    return a+b+c+d
}
let curryAdd = currify(add)

add(1,2,3,4)
console.log(curryAdd(1)(2)(3,4))