在这段代码中,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

JavaScript柯里化:实现可复用函数的终极解决方案

原文地址: https://www.cveoy.top/t/topic/mx67 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录