范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Javascript函数柯里化介绍

  首先看看柯里化到底是什么?
  维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
  看这个解释有一点抽象,我们就拿被做了无数次示例的add函数,来做一个简单的实现。// 普通的add函数 function add(x, y) {     return x + y }  // Currying后 function curryingAdd(x) {     return function (y) {         return x + y     } }  add(1, 2)           // 3 curryingAdd(1)(2)   // 3
  实际上就是把add函数的x,y两个参数变成了先用一个函数接收x然后返回一个函数去处理y参数。现在思路应该就比较清晰了,就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
  但是问题来了费这么大劲封装一层,到底有什么用处呢?没有好处想让我们程序员多干事情是不可能滴,这辈子都不可能.来列一列Currying有哪些好处呢?1. 参数复用// 正常正则验证字符串 reg.test(txt)  // 函数封装后 function check(reg, txt) {     return reg.test(txt) }  check(/d+/g, "test")       //false check(/[a-z]+/g, "test")    //true  // Currying后 function curryingCheck(reg) {     return function(txt) {         return reg.test(txt)     } }  var hasNumber = curryingCheck(/d+/g) var hasLetter = curryingCheck(/[a-z]+/g)  hasNumber("test1")      // true hasNumber("testtest")   // false hasLetter("21212")      // false
  上面的示例是一个正则的校验,正常来说直接调用check函数就可以了,但是如果我有很多地方都要校验是否有数字,其实就是需要将第一个参数reg进行复用,这样别的地方就能够直接调用hasNumber,hasLetter等函数,让参数能够复用,调用起来也更方便。2. 提前确认var on = function(element, event, handler) {     if (document.addEventListener) {         if (element && event && handler) {             element.addEventListener(event, handler, false);         }     } else {         if (element && event && handler) {             element.attachEvent("on" + event, handler);         }     } }  var on = (function() {     if (document.addEventListener) {         return function(element, event, handler) {             if (element && event && handler) {                 element.addEventListener(event, handler, false);             }         };     } else {         return function(element, event, handler) {             if (element && event && handler) {                 element.attachEvent("on" + event, handler);             }         };     } })();  //换一种写法可能比较好理解一点,上面就是把isSupport这个参数给先确定下来了 var on = function(isSupport, element, event, handler) {     isSupport = isSupport || document.addEventListener;     if (isSupport) {         return element.addEventListener(event, handler, false);     } else {         return element.attachEvent("on" + event, handler);     } }
  我们在做项目的过程中,封装一些dom操作可以说再常见不过,上面第一种写法也是比较常见,但是我们看看第二种写法,它相对一第一种写法就是自执行然后返回一个新的函数,这样其实就是提前确定了会走哪一个方法,避免每次都进行判断。3. 延迟运行Function.prototype.bind = function (context) {     var _this = this     var args = Array.prototype.slice.call(arguments, 1)       return function() {         return _this.apply(context, args)     } }
  像我们js中经常使用的bind,实现的机制就是Currying.

从原材料生产渠道和客户角度看智能手机行业(华为小米)几乎所有的工业行业,都离不开如下的模式原材料生产渠道客户生产中又可以细分为上游中游下游和终端(品牌方)。渠道又可以细分为2B和2C,线上和线下。这个链条里面,哪个环节的集中度最高,SpringBoot一个注解搞定重试机制,不能太优雅了前言在实际工作中,重处理是一个非常常见的场景,比如发送消息失败。调用远程服务失败。争抢锁失败。这些错误可能是因为网络波动造成的,等待过后重处理就能成功。通常来说,会用trycatc游戏版号重启没你想的那么简单,可能代表中概互联股政策底要来了坊间多次传闻游戏版号要恢复发放,这个传闻也终于在昨天成为现实。昨日晚间,国家新闻出版署官网公布了2022年4月国产网络游戏审批信息,这也是自2021年7月版号停发后首批发放版号。受太卷了Android八股文,面试最强王者最近有个朋友面试上了阿里P7,薪资暴涨了50,我私下问他能不能给大家分析一下经验。聊了很多,最后给我推荐了一份特别全的的八股文资料,这个资料在他面试的过程中给了他很多的帮助。这份资促数据共享施普林格自然携手合作方推出投稿一体化试验项目中新网北京4月16日电(记者孙自法)来自全球著名学术出版机构施普林格自然的最新消息称,其与数字科学(DigitalScience)旗下Figshare存储库最近联合推出一项免费的试女孩4年时间免费为2000位老人拍遗照被阿里巴巴颁发5000元奖金近日,85后商洛女孩杨鑫和她的公益团队火了。网友们评价她,温暖无声,又感人至深,更多人给她及团队点赞,谢谢你们关注到这些老人,至少这张照片能让后人记得他们的样子。杨鑫的故事也打动了2022年全球最具价值品牌前十名(华为进前10)美国和中国的品牌继续在BrandFinance全球品牌500强中占据主导地位。排名中超过三分之二的品牌价值来自两国,美国占49(3。9万亿美元),中国占19(1。6万亿美元)。NO打败华为的只能是中国品牌!余承东挖的仨坑,被realme填上了众所周知,华为手机是国产手机的巅峰之作,无论是芯片性能快充还是游戏体验,都非常出色,特别是华为的双旗舰Mate系列和P系列,均价卖到了5000,依然供不应求,国内市场份额一度超过了喜欢智能投影朋友们的福音来了!有它就够了近年来,智能投影已经成为年轻群体最受欢迎的视听消费科技产品之一。越来越多的年轻一代在为新家购置家电时,不再考虑传统电视而转向智能家庭投影设备。与此同时,另一个行业巨头三星也推出了高我国3D打印技术研发取得重要突破原标题我国3D打印技术研发取得重要突破4月16日,国内首台增材制造轴流式水轮机真机转轮在哈电集团哈尔滨能创数字科技有限公司制造完成并成功交付,标志着哈电集团在基于机器人的增材制造技上证科创板新一代信息技术ETF获批机构长期投资价值显著每经记者黄小聪每经编辑叶,峰今年2月,4家基金公司集体上报了4只上证科创板新一代信息技术ETF。每日经济新闻记者获悉,4月15日,嘉实基金华安基金等公司已率先拿到批文。对于科创板的