精华内容
下载资源
问答
  • 柯里化

    2021-04-08 14:43:26
    实现柯里化 柯里化是什么?是指一个函数,它接收函数A,能返回一个新的函数,新函数能够处理函数A的剩余参数 为什么要有柯里化?什么场景需要? https://github.com/mqyqingfeng/Blog/issues/42 先看一个简单版本...
    • 实现柯里化
      柯里化是什么?是指一个函数,它接收函数A,能返回一个新的函数,新函数能够处理函数A的剩余参数
      为什么要有柯里化?什么场景需要?
      https://github.com/mqyqingfeng/Blog/issues/42
    1. 先看一个简单版本,这个版本仅return一次函数,所以他的参数传递最多两次必须要传完,想要使用 curry(add)(1)(2)会报错。
        var curry = function (fn) {
          var args = [].slice.call(arguments, 1); // curry调用时的参数
          return function () {
            var newArgs = args.concat([].slice.call(arguments)); // addCurry调用时的参数
            console.log(newArgs)
            return fn.apply(this, newArgs);
          };
        };
        function add(a, b) {
            return a + b;
          }
      
          var addCurry = curry(add, 1, 2);
          // addCurry() // 3
          console.log(addCurry())
          //或者
          var addCurry1 = curry(add, 1);
          console.log(addCurry1(2))
          //或者
          var addCurry2 = curry(add);
          console.log(addCurry2(1, 2)) // 3
      
    2. 优化
      // 第二版
    function sub_curry(fn) {
      var args = [].slice.call(arguments, 1);
      return function () {
        return fn.apply(this, args.concat([].slice.call(arguments)));
      };
    }
    
    function curry(fn, length) {
    
      length = length || fn.length;
    
      var slice = Array.prototype.slice;
    
      return function () {
        if (arguments.length < length) { // 确保剩下最后一个参数的话 可以直接走sub_curry的拼接
          var combined = [fn].concat(slice.call(arguments));
          return curry(sub_curry.apply(this, combined), length - arguments.length);
        } else {
          console.log(fn) //输出 fn.apply(this, args.concat([].slice.call(arguments))); 根据执行函数fn 运算拼接参数的逻辑
          return fn.apply(this, arguments);
        }
      };
    }
    var fn = curry(function add(a, b) {
        return a + b;
      }) 
    const one = fn(1)(2)
    console.log(one) // 3
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,295
精华内容 5,718
关键字:

柯里化