柯里化 add(1)(2)(3)

function add() {
    const args = [...arguments];
    
    const fn = function() {
         const args2 = args.concat(...arguments);
         return add.apply(null, args2);
    }

    fn.valueOf = function() {
        return args.reduce((a, b) => a + b);
    }

    return fn;
}
const currying = (fn, ...args) => {
     if(args.length >= fn.length) {
          return fn(...args);
      } else {
          return (...args2) => {
              return currying(fn, ...args, ...args2);
          }
      }
}
const adding = (...args) => args.reduce((pre, cur) => pre + cur, 0);

//参数不确定
const currying = (fn) => {
  let args = [];

  return function temp(...newArgs) {
    if (newArgs.length) {
      args.push(...newArgs);
      return temp;
    } else {
      const val = fn.apply(this, args);
      args = [];
      return val;
    }
  };
};

var myAdd = currying(adding)
myAdd(1)(2)() // 3
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容