自学内容网 自学内容网

函数柯里化

函数柯里化:将一个接受多个参数的函数转换成多个接受一个参数的函数的过程。
如下:function(a,b,c)转换成function(a)(b)(c)
实现代码:

  function currying(fn){
    const args=[];
    function _curry(...newArgs){
      //接收参数
      args.push(...newArgs);
      if(args.length>=fn.length){
        //返回函数
        return fn(..args);
      }
      //继续接受参数
      return _curry;
    }
    return _curry;

  }

应用:

  //定义调用函数
  function add(a, b, c) {
    return a + b + c;
  }
  const curriedAdd = currying(add);
 //单独调用的时候没有问题,连续调用报错
  console.log(curriedAdd(1)(2)(3));//输出6
  //报错 curriedAdd(...) is not a function
  console.log(curriedAdd(1)(2, 3));
  console.log(curriedAdd(1, 2, 3));
  

其他实现方式

function curry(fn) {
    return function curried(...args) {
      //console.log(fn.length, args.length);
      if (args.length >= fn.length) {
        return fn.apply(this, args);
      } else {
        return function (...args2) {
          return curried.apply(this, args.concat(args2));
        };
      }
    };
  }

原文地址:https://blog.csdn.net/HDdgut/article/details/143080342

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!