函数柯里化

124 阅读1分钟

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

例如: add(1,2,3,4)变成currying(sumFn)(1)(2)(3)(4)

  1. 首先是函数add 变成 函数 currying

  2. 其次转变后的函数currying要满足的条件

    返回一个函数用来接收余下参数------ 由函数remain来完成

    在remain函数返回新结果-------- 由sumFn函数来完成

`

    const sumFn = (...arguments) => {// 不定长参数求和
    return arguments.reduce((a, b) => a + b); //用来返回结果的
    };
//currying函数要接收一个参数,这个参数func是一个函数,也就是用来返回结果的函数

    var currying = function (func) {
    const args = []; //存已经输入的参数

    return function remain(...rest) {  //   返回可以接收余下参数的函数remian
 //   判断是不是需要执行函数的情况  如果传入的参数长度为0,
      if (rest.length === 0)
       
        return func(...args); //那就需要执行求和函数(带已经输入的参数)func也就是sumFn函数
 // 如果还有参数输入,
      else {
        args.push(...rest); //继续拼接参数,
        return remain; //并且返回函数自身,用来继续接收后边的参数
      }
    };
  };
  console.log(currying(sumFn)(1, 2, 3)(4, 5)(6)()); // 21`