函数柯里化
当一个函数需要传入多个参数时,可以对函数进行改造,只传递部分参数,函数里返回一个新的函数,新的函数来接收剩余的参数,而固定的参数则通过闭包来实现。
1.当一个函数有多个参数的时候,先传递一部分参数调用它,这部分参数以后永远不变,
2.返回一个新的函数接受u剩余的参数,返回结果
function checkAge(min){ //min不变,除非再次调用传入新的min生成新的函数,用函数生成函数。 return function(age){ return age>min } } //min参数是固定的,age是不固定的 let checkAge18 = checkAge(18) checkAge18(20) //传入age 复制代码
loadsh里的柯里化函数 curry()
function curry(func){ return function curriedFn(...args){ console.log(args); *//判断实参与形参的个数* //如果值传递部分函数,实参小于形参,则返回一个函数 //然后把第一次传入的参数,和剩余传入的参数合并在一起, //实参和形参个数相同,就会调用最终的这个函数。 if(args.length<func.length){ return function(){ return curriedFn(...args.concat(Array.from(arguments))) } } return func(...args) } } 复制代码
总结:
1.函数的柯里化可以给一个函数传递较少的参数,得到一个已经记住了某些固定参数的新函数,生成一个有固定函数的函数,类似于给同样的纯函数分门别类。
2.同样是一中对函数参数的缓存(闭包),指最初被传递的小形参个数的实参。
3.可以让函数变得更灵活,让函数的粒度变小。
4.把多元函数(多个参数)转换成一元(一个参数)函数,可以组合使用函数产生强大的功能。
作者:拔琴相助
链接:https://juejin.cn/post/7021726591424135182