函数柯里化:降元(多元函数降成一元函数)

586 阅读1分钟

function multiply(a, b, c){
   return a*b*c
}
multiply(1, 2, 3)

柯里化后

function multiply(a) {
  return (b) => {
    return (c) => {
       return a * b * c
    }
  }
}
multiply(1)(2)(3)

通过把一个多函数转换成一系列嵌套的函数,每个函数依次接受一个参数,这就是函数柯里化

let _fn = curry(function(a,b,c,d,e){        console.log(a + b + c + d + e)});console.log(fn);_fn(1,2,3,4,5);    //15_fn(1)(2)(3,4,5);  //15_fn(1,2)(3,4)(5);  //15_fn(1)(2)(3)(4)(5);  //15

function curry(fn, len = fn.length) {     return _curry.call(this, fn, len)}function _curry(fn,len,...args) {            return function (...params) {console.log(params);                let _args = [...args,...params];console.log(_args);                if(_args.length >= len){                    return fn.apply(this,_args);                }else{                    return _curry.call(this, fn, len, ..._args)                }            }}