Javascript函数柯里化介绍
首先看看柯里化到底是什么?
维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
看这个解释有一点抽象,我们就拿被做了无数次示例的add函数,来做一个简单的实现。普通的add函数functionadd(x,y){returnxy}Currying后functioncurryingAdd(x){returnfunction(y){returnxy}}add(1,2)3curryingAdd(1)(2)3
实际上就是把add函数的x,y两个参数变成了先用一个函数接收x然后返回一个函数去处理y参数。现在思路应该就比较清晰了,就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
但是问题来了费这么大劲封装一层,到底有什么用处呢?没有好处想让我们程序员多干事情是不可能滴,这辈子都不可能。来列一列Currying有哪些好处呢?1。参数复用正常正则验证字符串reg。test(txt)函数封装后functioncheck(reg,txt){returnreg。test(txt)}check(dg,test)falsecheck(〔az〕g,test)trueCurrying后functioncurryingCheck(reg){returnfunction(txt){returnreg。test(txt)}}varhasNumbercurryingCheck(dg)varhasLettercurryingCheck(〔az〕g)hasNumber(test1)truehasNumber(testtest)falsehasLetter(21212)false
上面的示例是一个正则的校验,正常来说直接调用check函数就可以了,但是如果我有很多地方都要校验是否有数字,其实就是需要将第一个参数reg进行复用,这样别的地方就能够直接调用hasNumber,hasLetter等函数,让参数能够复用,调用起来也更方便。2。提前确认varonfunction(element,event,handler){if(document。addEventListener){if(elementeventhandler){element。addEventListener(event,handler,false);}}else{if(elementeventhandler){element。attachEvent(onevent,handler);}}}varon(function(){if(document。addEventListener){returnfunction(element,event,handler){if(elementeventhandler){element。addEventListener(event,handler,false);}};}else{returnfunction(element,event,handler){if(elementeventhandler){element。attachEvent(onevent,handler);}};}})();换一种写法可能比较好理解一点,上面就是把isSupport这个参数给先确定下来了varonfunction(isSupport,element,event,handler){isSupportisSupportdocument。addEventListener;if(isSupport){returnelement。addEventListener(event,handler,false);}else{returnelement。attachEvent(onevent,handler);}}
我们在做项目的过程中,封装一些dom操作可以说再常见不过,上面第一种写法也是比较常见,但是我们看看第二种写法,它相对一第一种写法就是自执行然后返回一个新的函数,这样其实就是提前确定了会走哪一个方法,避免每次都进行判断。3。延迟运行Function。prototype。bindfunction(context){varthisthisvarargsArray。prototype。slice。call(arguments,1)returnfunction(){returnthis。apply(context,args)}}
像我们js中经常使用的bind,实现的机制就是Currying。
Python(十四)阶段小结温故而知新,可以为师矣!又到了回顾知识的时间啦,让我带着大家来复习一下面向对象的知识点!类:classclassPerson:definit(self,name):对象调用方法……
共享员工更需共同呵护来源:陕西网共享员工更需共同呵护新业态劳动者的权益如何保障?随着互联网经济的蓬勃发展,各种依附于网络的新经济业态也应运而生,成为就业增长的一个重要渠道。……
你知道华为公司最大的股东是谁?国内巨头华为营收超8500亿,那你知道他最大股东是谁吗?又是谁说了算呢?华为只有两个股东,一个是华为最大的个人股东任正非,持股0。88,另一个是华为工会委员会。任正非把9……
电压很小,电流很大能电死人吗?不能,只要不超过国家规定的安全电压标准交流36V和12v(潮湿和有限空间的安全电压标准)都是安全的。1一个50W的小变压器输出是12V,如果将12V改用扁铜绕成2V输出就……
三星手机科技三星给国产机挖了个坑,喂饱了自己,带偏了国产机?说起三星,对于很多消费者而言,可能觉得它是一个过气品牌,因为三星手机已经从之前的国内第一,掉到了其它,三星手机在国内销量真……
为什么国人一多半都使用苹果手机,而不用国产手机呢?你胡说八道呢吧?〔捂脸〕〔捂脸〕使用苹果手机的多是经济较好的女同志,还有一些学生。在一般单位里,使用苹果手机的还真不多。你是替苹果手机做广告。我的亲戚朋友家人里,只有两人……
我想问问,手机可以换处理器吗?怎么换?我想问问,手机可以换处理器吗?怎么换?理论上是可以更换的,但只限于同型号的处理器。这不但是手机商的策略、也有芯片和手机不断发展的原因。手机不像电脑,空间狭小需要放置的零部……
现在入手10s是值得吗?还是等k50?如果只是标准版的K50,那我觉得没多大必要等,因为这款手机升级不大,已经有小道消息说K50标准版还是用的高通870(Pro和Pro用的是天玑8000、天玑9000,K50电竞版……
高水平科技创新驱动石油工业高质量发展近两个月,中国石油重大科技成果应用捷报连连。9月1日,中国石油自主研发的我国首套一键式人机交互7000米自动化钻机正式投入工业性应用试验。8月,大庆油田古龙陆相页岩油国家……
板厂里的泥石流映泰为旗下主板提供Win7驱动〔PConline资讯〕据外媒Anandtech报道,映泰将为旗下的部分Intel与AMD主板提供Win7驱动支持。本次驱动支持的产品囊括了AMD的B350芯片组至X47……
天能氢能源荣获燃料电池电堆技术贡献奖近日,高工氢电燃料电池系统技术与应用峰会在上海举行,天能氢能源荣获2021年度燃料电池电堆技术贡献奖。天能氢能源坚持科技创新,通过自主研发,研制出30kW、40kW、60……
哪吒汽车完成超20亿元新融资徐新投了个奶酪丨投融周报本周焦点回顾:大厂投资动态。B站做手游,小米做投资,腾讯投机器人。新消费赛道,美食最诱人。2月23日消息,中国馄饨连锁品牌吉祥馄饨宣布完成一轮近亿元的战略融资,投资……