一些有趣的Snippet

110 阅读1分钟
function addCurry(x, y, z) {
  return x + y + z;
}

const curry = (fn, ...args) => {

  //fn就是addCurry,fn.length就是3对应x,y,z
  //args.length就是add传入的参数长度,第一次是add(1),即1
  // 1<3所以继续柯里化,传入(2,3)此时args为(1,2,3)直接执行fn,即(addCurry(1,2,3))
  
  return args.length >= fn.length ?
    fn(...args) :
    (..._args) => curry(fn, ...args, ..._args);
}


const add = curry(addCurry);
console.log( add(1)(2, 3) ); //6