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) } }}