JS高级-柯理化函数(currying)

171 阅读1分钟

在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技 术。

柯里化封装案例

function fn(a,b,c,d){
      return a + '://' + b + ':' + c + d
}

  
function yi(call,...yi){

  return function(...er){

        er = [...yi,...er]

        if(er.length === call.length){

          return call(...er)

        }else{

          //执行er 函数

          return yi(call,...er)

        }

      }

    }

    let num = yi(fn,12,13,14,15)

    console.log(num())

柯里化封装 数字相乘

function currying(fn) {
        const args = Array.prototype.slice.call(arguments, 1);
        const inlay = function () {
          if (arguments.length === 0) {
            return fn.apply(this, args);
          }

          if (arguments.length > 0) {
            Array.prototype.push.apply(args, arguments);
            return inlay;
          }
        };

        return inlay;
      }

      function add() {
        const vals = Array.prototype.slice.call(arguments);
        return vals.reduce((pre, val) => {
          return pre + val;
        });

      }

      let newAdd = currying(add, 1, 2, 3);
      newAdd(4, 5);
      newAdd(6, 7)(6)(2, 3);
      console.log(newAdd()); //39