幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

javascript之函数柯里化(curry)实现add(1

  前言
  本文主要从3W(what,how,why)角度出发通俗易懂地解释一下什么是函数柯里化,以及怎么用三行代码来实现add(1)(2)(3)这是个很常见的面试题。什么是函数柯里化(curry)
  函数柯里化(curry)是函数式编程里面的概念。curry的概念很简单:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
  简单点来说就是:每次调用函数时,它只接受一部分参数,并返回一个函数,直到传递所有参数为止。
  举个
  将下面接受两个参数的函数改为接受一个参数的函数。constadd(x,y)xy;add(1,2);
  改成每次只接受一个参数的函数constaddxyxy;add(1)(2);
  柯里化,不可变数据类型,纯函数等都是函数式编程中的概念。在React中这些概念很常见,因为React中很多涉及到函数式编程的概念。想要具体了解什么是函数式编程,可以查看JS函数式编程指南add(1)(2)(3)
  我们可以自己先尝试写一个add(1)(2)(3)constaddxyzxyz;console。log(add(1)(2)(3));
  看起来并不是那么难,但是如果面试官的要求是实现一个add函数,同时支持下面这几种的用法呢add(1,2,3);add(1,2)(3);add(1)(2,3);
  如果还是按照上面的这种思路,我们是不是要写很多种呢。。。
  我们当然可以自己实现一个工具函数专门来生成柯里化函数。
  主要思路是什么呢,要判断当前传入函数的参数个数(args。length)是否大于等于原函数所需参数个数(fn。length),如果是,则执行当前函数;如果是小于,则返回一个函数。constcurry(fn,。。。args)函数的参数个数可以直接通过函数数的。length属性来访问args。lengthfn。length这个判断很关键!!!传入的参数大于等于原始函数fn的参数个数,则直接执行该函数?fn(。。。args)传入的参数小于原始函数fn的参数个数时则继续对当前函数进行柯里化,返回一个接受所有参数(当前参数和剩余参数)的函数:(。。。args)curry(fn,。。。args,。。。args);functionadd1(x,y,z){returnxyz;}constaddcurry(add1);console。log(add(1,2,3));console。log(add(1)(2)(3));console。log(add(1,2)(3));console。log(add(1)(2,3));Ramda
  Ramda中的函数所有都支持柯里化。也就是说,所有的多参数函数,默认都可以使用单参数函数。
  还是举上面的例子吧constaddThreeNumbers(x,y,z)xyz;constcurriedAddaddThreeNumbersR。curry(addThreeNumbers);constfcurriedAddaddThreeNumbers(1,2);console。log(f(3));
  大名鼎鼎的lodash中也提供了柯里化函数,那么它和Ramda有什么区别呢
  lodash是一个很强大的工具函数库,比如节流,防抖,深拷贝等等,只要引入lodash,我们就可以直接使用。
  Ramda是一个函数式编程的理念的函数库。柯里化有什么作用
  主要有3个作用:参数复用、提前返回和延迟执行
  我们来简单地解释一下:
  参数复用:拿上面f这个函数举例,只要传入一个参数z,执行,计算结果就是12z的结果,1和2这两个参数就可以直接复用了。
  提前返回和延迟执行也很好理解,因为每次调用函数时,它只接受一部分参数,并返回一个函数(提前返回),直到(延迟执行)传递所有参数为止。
  考点:函数柯里化
  函数柯里化概念:柯里化(Currying)是把接受多个参数的函数转变为接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术。
  1)粗暴版functionadd(a){returnfunction(b){returnfunction(c){returnabc;}}}console。log(add(1)(2)(3));6
  2)柯里化解决方案参数长度固定constcurry(fn)(judge(。。。args)args。lengthfn。length?fn(。。。args):(。。。arg)judge(。。。args,。。。arg));constadd(a,b,c)abc;constcurryAddcurry(add);console。log(curryAdd(1)(2)(3));6console。log(curryAdd(1,2)(3));6console。log(curryAdd(1)(2,3));6参数长度不固定functionadd(。。。args){求和returnargs。reduce((a,b)ab)}functioncurrying(fn){letargs〔〕returnfunctiontemp(。。。newArgs){if(newArgs。length){args〔。。。args,。。。newArgs〕returntemp}else{letvalfn。apply(this,args)args〔〕保证再次调用时清空returnval}}}letaddCurrycurrying(add)console。log(addCurry(1)(2)(3)(4,5)())15console。log(addCurry(1)(2)(3,4,5)())15console。log(addCurry(1)(2,3,4,5)())15

王者荣耀在游戏中最委屈的位置王者荣耀最委屈的位置是哪个位置王者荣耀在游戏中最委屈的位置可能因玩家而异。不过,一般来说,辅助可能是最委屈的位置之一。辅助需要在游戏中负责保护队友、提供支援和控制敌……亏损1355万元!曾号称南茅台北皇台的甘肃名酒,已成时代眼泪甘肃人爱喝酒,拿起酒杯就干,这是当地人的豪爽,感情深,一口闷。在他们的酒桌上,曾经有一款非常有名的白酒,可以说是许多甘肃人人生中的非常难忘的酒,它就是曾号称南茅台北皇台的皇台酒……上海这一夜,两张合照,把对刘亦菲的排挤体现的淋漓尽致普通人的合照是记录美好、留住时间,而明星的合照却暗藏猫腻和算计。曾经的杨幂和唐嫣,是人尽皆知的好闺蜜,婚礼上的唯一伴娘,就是两人友谊的最好见证。奈何物是人非,不知从……男性肾不好,不碰3水,做好3件事,肾也慢慢变好!肾是人体泌尿器官,位于后腰两侧;肾脏具有过滤功能,人体的血液通过肾小球的过滤,把人体大量代谢废物排出体外,所以肾也被誉为是血液的清洁工。同时,肾脏还具有吸收功能,把对人体……东方财富软件宕机背后业绩瓶颈已现,市值蒸发超1800亿!东方财富,现在都11:08还是无法登录,你们到底在搞什么!?上面这句充满怨气的话,出自一位东方财富的客户,3月21日,东方财富交易软件频繁出现无法登录、无法交易等软件崩溃……春日广州满城浪漫搭乘有轨电车,一路能将春色美景尽收眼底。广州日报全媒体记者骆昌威摄盛开的禾雀花吸引众多市民前来打卡。广州日报全媒体记者杨耀烨摄粤剧艺术博物馆广州日报全媒体记者陈忧子……春天一步到胃盒马推出40多款懒人菜天目山雷笋腌笃鲜、香椿苗拌桃仁、苜蓿菜团子有消费者发现,近来盒马的冷藏货架上多了些预制春菜,成了不爱下厨又想咬春的懒人福音。据统计,这个春季,盒马将推出超过40款懒人菜,让春天……这条轨道交通线路春天格外美长江日报大武汉客户端2月26日讯2月26日,武汉气温回升,风和日丽,万里无云。市民乘坐武汉轨道交通十六号线,可以欣赏独特的美景。列车伴着长江而行,轨道两边春意盎然,郁郁葱葱。(……41岁宋慧乔时装周生图曝光!下半张脸难掩老态,刘海造型翻车终于有明星勇闯时装周的热闹可以围观啦!最近伦敦、米兰、巴黎三大时装周排队上线,超10位内娱明星赶去海外争奇斗艳,不过这次主角不是他们,而是一位我们都熟悉的韩星宋慧乔。……壮族边关文化第一古城,崇左太平古城崇左市位于广西的西南部,是桂西南的政治经济交通中心。历史悠久的崇左,山川秀丽,人杰地灵,是镶嵌在南国左江河畔的一颗璀璨的明珠,《中国国家地理》赞美崇左为:桂林山水甲天下,崇左风……暗黑4公测时间确定!暗黑破坏神4上线时间下载方法看这里相信上次暗黑4内测有不少的玩家没有抢到名额,很多玩家都为此感到非常不甘心。这次暗黑4官方也公布了暗黑4的公测,感兴趣的玩家一起来了解一下吧!暗黑4测试时间定了!下载方法看……知名地标,全露出来了近日,中国台湾知名景区日月潭缺水干涸的消息,再次引起网友热议。南都记者了解到,近年降雨积水量不足,又因近期配合下游农业灌溉用水,台湾南投县日月潭水位直落,3月19日骤降超过7米……
黄金最近一直在涨从2019年年末开始,黄金价格一直在升值。疫情引起的经济衰退,导致黄金价格大涨,俄乌战争助推了黄金的升值,美元主导地位的动摇也史黄金的作用日益凸显很多世界级经济评估机构唱衰20……宁可为垃圾买单,也不用华为,苹果到底好在哪里?文丨侠说科技苹果的产品就是垃圾!自从华为被美国打压之后,这种声调空前的高涨,我相信在互联网十分普及的今天,大家对这种声调或多或少都有过一定的了解。事实上,我作……国足主帅多难找?外教拒绝加盟,李铁被抓影响大,李霄鹏成背锅侠进入2023年,中国足协寻找国足新主帅的工作一直没停下,据北青报透露,足协先后邀请4位外教,包括有曾执教江苏苏宁拿下中超冠军的奥拉罗尤、前韩国主帅保罗本托、塞尔维亚主帅斯托伊科……朝鲜观察,朝鲜人一天只吃三个土豆吗?去朝鲜之前,曾在网上看到有人说朝鲜因为粮食紧张,普通百姓每天只吃三个土豆。我对这个问题一直比较疑惑,带着这个问题走进了朝鲜,想亲身想去体验这个国家。因为是节假日,出国游的人还比……荣耀Magic3系列对话千年邢白瓷,演绎高冷动人的细节之美9月末,国内首份非遗电商发展报告正式出炉。通过报告可以看到,在过去的一年时间里,淘宝天猫平台共有14个非遗产业成交过亿,并且有超过67的受访非遗店主在经营过程中找到了手艺传承人……净水器哪个牌子好,让家人都喝上健康水冰尊净水器是世界净水器十大排名领导品牌。随着人们对饮水安全的重视,直饮净水器可以说是每家每户必备的一个小家电。因为它可以确保家人喝到安全水,不受污染水所困扰。下面就为大家……假期出游遇意外,责任谁来承担?超长待机的十一假期大家都去哪里浪了呀?观海?爬山?还是游古迹?祖国山河美景虽好,但是如果在旅途受了伤,开心事就会变成糟心事。更重要的是,应该找谁承担责任呢?……中国的出击古巴导弹危机,解放军抓住时机狠狠教训印度一、前奏世界从未如今天这般离毁灭如此之近。发生在上世纪60年代的古巴导弹危机直到今天,依旧被认为是人类文明离毁灭最近的一次。古巴导弹危机是冷战中,美苏两个超级……交易戈贝尔的零头,成为爵士非卖品,森林狼肠子悔青!爵士总会挖掘出好中锋,不管安吉是来之前,爵士就是有这个优良传统传统,历任总经理操作都有一套!爵士新秀中锋沃克凯斯勒10投8中,得到17分加14个篮板加7次封盖。大学时期和……电子学报文章精选微波谐振式传感器研究进展内容简介作为电子系统获取外界信息的唯一窗口,传感器大量应用于国防、工业生产、个人消费等领域。基于平面结构的微波谐振式传感器可实现介质材料电磁参数的无损检测,且制造工艺简单……糖葫芦卡喉险窒息,他用一招救下儿童一命!家里有小孩的家长们要注意啦!平时要学会海姆立克急救法,关键时刻有大用!1月26日下午,南京夫子庙景区门口有一名儿童吃冰糖葫芦时被卡住喉咙。消防员接报后及……AG全程黄金档,天狼星首日亮相!KPL赛程官宣,月光DRG可前言:AG全程晚8点黄金档,天狼星打响首日比赛,2023年春季赛首轮赛程官宣,月光做出犀利预测!自从大年初七以来,各大王者荣耀KPL战队陆续收假组织训练赛,不断曝光出来的训练赛……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网