JavaScript-柯里化函数实现

98 阅读1分钟

函数柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

函数柯里化的主要作用:

  • 参数复用
  • 提前返回 – 返回接受余下的参数且返回结果的新函数
  • 延迟执行 – 返回新函数,等待执行
    const curry = (fn, ...args) => {
        // 2.后面进入时判断传参数量是否符合要执行的函数需要的参数,不符合时继续返回curry方法,把要执行的函数和参数传进去
        if (args.length < fn.length) {
            // 1.js上下文初始化执行var sum = curry(sumFn);时,返回curry方法,把要执行的函数和参数传进去
            return (...arguments) => curry(fn, ...args, ...arguments);
        } else {
            // 3.要执行的函数可执行时立即执行返回结果
            return fn(...args);
        }
    };
    function sumFn(a, b, c) {
        return a + b + c;
    }
    var sum = curry(sumFn);
    console.log(sum(2, 3)(5)); //10
    const curry = function (fn) {
      const args = [].slice.call(arguments,1)
      return function m () {
        const totalArgs = args.concat(...arguments)
        if(totalArgs.length === fn.length){
          return fn.apply(this,totalArgs)
        }else {
          return function () {
            return m(...totalArgs,...arguments)
          }
        }
      }
    }

    const addSum = (a,b,c)=>console.log(a,b,c);
    const curredAddSum = curry(addSum)
    curredAddSum(2,3)(4)