JavaScript柯里化:实现可复用函数的终极解决方案
在这段代码中,sfn实际上是一个函数,它被赋值为curry(sum)的返回值。curry函数接受一个回调函数和一个空数组作为参数,并返回一个新的函数。当我们调用sfn(2)(3)时,实际上是在调用curry(sum)(2)(3),返回一个新函数,该函数接受两个参数并将它们与之前的参数连接起来。因此,add23实际上是一个函数,它接受两个参数并将它们与之前的参数连接起来,返回一个结果。因此,当我们调用add23(4,5)和add23(5,6)时,实际上是在调用该函数,并将参数传递给它。
//柯里化的终极解决方案 //原函数 function sum(a,b,c,d){ return a+b+c+d; } //柯里化工具函数 function curry(cb,arr=[]){ return function(...args){ arrs = [...arr,...args]; if(arr.length<cb.length){ return curry.call(this,cb,arrs) }else{ return cb(...arrs); } }
}
let sfn = curry(sum);
// let onefn01 = sfn(2);
// let onefn02 = onefn01(3);
// console.log(onefn01==onefn02);
// console.log(sfn(2)(3)(4)(5));
let add23 = sfn(2)(3);
console.log(add23(4,5));//14 console.log(add23(5,6));//16
原文地址: https://www.cveoy.top/t/topic/mx67 著作权归作者所有。请勿转载和采集!