当前位置: 首页 > Web前端 > JavaScript

柯里化函数

时间:2023-03-26 20:29:55 JavaScript

柯里化函数标题内容柯里化定义、特点、函数柯里化实例实现一个柯里化函数定义柯里化就是将一个接受多个参数的函数转换为一个接受一个参数的函数(这里指的是函数的第一个参数)原函数),如何处理前面多个参数的剩余参数?剩余的参数被放入一个新的函数中。这个新函数是接受单个参数的函数返回的函数。整体理解如下:functiontest(a,b){}之前接受多个参数变成了接受一个函数的一个技巧,接受一个单参数函数,返回一个接受剩余参数并返回结果的新函数.函数测试(a,b){returna*a+b*b;}//curringfunctiontestCurring(a){returnfunction(b){returna*a+b*b;柯里化定义其实就是传递参数的拆分,但是返回函数的特性是由于JavaScript闭包的存在,所以对于实现柯里化有着天然的优势。把多个参数拆分成一个参数形式,我们想一想,发现拆分之后,我们对每个函数的作用和每个参数的作用更加清晰。这其实就是函数式编程的思想。从每个函数出发,从每个参数出发,去追溯函数整体的作用,也就是从局部入手,看全局,这也是柯里化的特点。然而,上述例子只是具体的例子。我问自己有没有通用的例子,如下://Generalversionvarcurring=function(func){var_args=[].slice.call(arguments,1);returnfunction(){args=_args.concat([].slice.call(arguments));func.apply(null,args);}}函数或者也可以说是一个好处,其实从特性上可以得到一个函数,当我们关注每个参数的作用时,柯里化是我们的选择(比如当每个参数相同或者当多个参数中有相似的参数);代码需要更清晰,知道数据的流向(每个参数都可以追溯);当参数之间有明显的顺序时(比如参数a在参数b之前,是必须的);实例/**||=========================================================================================||||文件名:1290-curried.js||说明:||问题描述:||||已知fn是预定义函数,实现函数curryIt,调用后满足以下条件:||1、返回一个函数a,a的length属性值为1(即显式声明a接收一个参数)||2、调用a后,返回一个函数b,b的length属性值为1||3、调用b后,返回一个函数c,c的length属性值为1||4、调用c后,返回结果与调用fn相同5、fn的参数依次为函数a、b、c的调用参数||输入范例:||varfn=function(a,b,c){返回a+b+c};咖喱(fn)(1)(2)(3);||||示例输出:||6||版本:1.0||||创建时间:24/10/201609:53:32||修订:无||编译器:Firefox||||作者:JackDan9(https://www.github.com/JackDan9),J.Dan92016@gmail。com||作者博客:http://my.csdn.net/XXJ19950917||||=========================================================================================*///柯里化是转换一个函数将接受多个参数的函数变成一个接受单个参数的函数(原函数的第一个参数),//返回一个接受其余参数并返回结果的函数新函数的技术FunctionCurryit(Fn){ReturnFunctionA(xa){返回函数B(XB){返回函数C(XC){返回Fn.Call(this,xa,xb,xc);};};};};;}注意柯里化更多的是数学上的概念,方便函数拆分,一步步求解得到整体的解决方案,但也是JavaScript需要理解的必备特性。JackDan1290中的思考-CurryingCurring视频