位置: 编程技术 - 正文

深入剖析JavaScript中的函数currying柯里化(深入剖析kubernetes pdf)

编辑:rootadmin

推荐整理分享深入剖析JavaScript中的函数currying柯里化(深入剖析kubernetes pdf),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:深入剖析大国关系深刻调整对世界格局的影响,深入剖析思想根源的问题,深入剖析大国关系深刻调整对世界格局的影响,深入剖析反面典型案例,深入剖析kubernetes,深入剖析大国关系深刻调整对世界格局的影响,深入剖析正反面典型案例,深入剖析反面典型案例,内容如对您有帮助,希望把文章链接给更多的朋友!

curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名)。 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。

因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程。

柯里化一个求和函数 按照分步求值,我们看一个简单的例子

可以看到, concat3WordsCurrying("foo ") 是一个 Function,每次调用都返回一个新的函数,该函数接受另一个调用,然后又返回一个新的函数,直至最后返回结果,分布求解,层层递进。(PS:这里利用了闭包的特点)

那么现在我们更进一步,如果要求可传递的参数不止3个,可以传任意多个参数,当不传参数时输出结果?

首先来个普通的实现:

但如果要求把每个数乘以之后再相加,那么:

好在有 map 和 reduce 函数,假如按照这个模式,现在要把每项加1,再汇总,那么我们需要更换map中的函数。

下面看一下柯里化实现:

上面 adder是柯里化了的函数,它返回一个新的函数,新的函数接收可分批次接受新的参数,延迟到最后一次计算。

通用的柯里化函数

深入剖析JavaScript中的函数currying柯里化(深入剖析kubernetes pdf)

更典型的柯里化会把最后一次的计算封装进一个函数中,再把这个函数作为参数传入柯里化函数,这样即清晰,又灵活。

例如 每项乘以, 我们可以把处理函数作为参数传入:

这样 sum = currying(multi),调用非常清晰,使用效果也堪称绚丽,例如要累加多个值,可以把多个值作为做个参数 sum(1,2,3),也可以支持链式的调用,sum(1)(2)(3) 柯里化的基础

上面的代码其实是一个高阶函数(high-order function), 高阶函数是指操作函数的函数,它接收一个或者多个函数作为参数,并返回一个新函数。此外,还依赖与闭包的特性,来保存中间过程中输入的参数。即: 函数可以作为参数传递 函数能够作为函数的返回值 闭包 柯里化的作用 延迟计算。上面的例子已经比较好低说明了。

参数复用。当在多次调用同一个函数,并且传递的参数绝大多数是相同的,那么该函数可能是一个很好的柯里化候选。

动态创建函数。这可以是在部分计算出结果后,在此基础上动态生成新的函数处理后面的业务,这样省略了重复计算。或者可以通过将要传入调用函数的参数子集,部分应用到函数中,从而动态创造出一个新函数,这个新函数保存了重复传入的参数(以后不必每次都传)。例如,事件浏览器添加事件的辅助方法:

每次添加事件处理都要执行一遍 if...else...,其实在一个浏览器中只要一次判定就可以了,把根据一次判定之后的结果动态生成新的函数,以后就不必重新计算。

这个例子,第一次 if...else... 判断之后,完成了部分计算,动态创建新的函数来处理后面传入的参数,这是一个典型的柯里化。 Function.prototype.bind 方法也是柯里化应用

与 call/apply 方法直接执行不同,bind 方法 将第一个参数设置为函数执行的上下文,其他参数依次传递给调用方法(函数的主体本身不执行,可以看成是延迟执行),并动态创建返回一个新的函数, 这符合柯里化特点。

下面是一个 bind 函数的模拟,testBind 创建并返回新的函数,在新的函数中将真正要执行业务的函数绑定到实参传入的上下文,延迟执行了。

这里要注意 prototype 中 this 的理解。

以上这篇深入剖析JavaScript中的函数currying 柯里化就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持积木网。

浅析Javascript中bind()方法的使用与实现 在讨论bind()方法之前我们先来看一道题目:varaltwrite=document.write;altwrite("hello");//1.以上代码有什么问题//2.正确操作是怎样的//3.bind()方法怎么实现对于上

js简单倒计时实现代码 本文实例讲述了js简单倒计时实现代码。分享给大家供大家参考,具体如下:divclass="time"距离活动结束还有spanid="day"/span天spanid="hours"/span小时spanid="min"/sp

js实现精确到秒的日期选择器完整实例 本文实例讲述了js实现精确到秒的日期选择器。分享给大家供大家参考,具体如下:script//主调用函数是setday(this,[object])和setday(this),[object]是控件输出

标签: 深入剖析kubernetes pdf

本文链接地址:https://www.jiuchutong.com/biancheng/369915.html 转载请保留说明!

上一篇:javascript中利用柯里化函数实现bind方法【推荐】(javascript如何调用)

下一篇:浅析Javascript中bind()方法的使用与实现(javascript详解)

  • 增值税16%降到13%的留抵退税的情况说明咋写
  • 报税怎么操作流程图
  • 撤回或减少投资同撤资减资的区别
  • 进口海关是指
  • 进项税额转出是在当月还是回到所属期
  • 提高资产利用率,增加销售收入
  • 利息收入为什么记贷方
  • 如何知道一家公司是否可靠
  • 小规模纳税人金融服务税率
  • 打印复印费的明细怎么开?
  • 货车压线行驶怎么处罚
  • 税收滞纳金可以免除吗
  • 去税务局核定税种怎么填
  • 出口退税进项税额转出是什么意思
  • 新会计准则短期租赁会计分录
  • 公司发生的业务可以转让给子公司嘛?
  • 报销单大写金额填写格式1000
  • 暂估入库冲回有差额
  • 企业筹建期间开办费计入什么科目计入借方还是贷方
  • 母公司计提子公司投资收益
  • 具备以下条件
  • 两家企业共用一个厂区
  • 固定资产清理出售合同
  • 开红字发票后再开蓝字发票应如何入账?
  • 您的磁盘
  • 收到的销项负数要认证吗
  • win10播放视频软件
  • PHP:pg_unescape_bytea()的用法_PostgreSQL函数
  • 拉尔韦橡
  • 兼职老师工资怎么扣税
  • 公司员工个人所得税交多少
  • 个人简历html网页代码含效果图
  • 用html语言完成以下内容
  • vue watcher
  • phpcms教程
  • 微信转账和支付宝转账的区别
  • 帝国cms移动端
  • 安装使用漏电保护器是属于哪种安全措施
  • 礼物提前到会不会不好
  • 小额支出的两种形式
  • 固定资产科目代码是多少
  • ERROR CODE: 1175 YOU ARE USING SAFE UPDATE MODE AN
  • 管理费用冲减其他应付款分录
  • 预期信用损失率的确认依据和过程
  • 实际缴纳的税金比应交的多的部分记入什么科目
  • 留抵进项税太多怎么办
  • 职工福利费计提标准
  • 企业计提坏账准备形成可抵扣暂时性差异
  • 辞退福利什么时候确认
  • 赔偿款从货款扣除怎么做账
  • 无形资产可以占多少比例
  • 库存现金多出来怎么调账
  • 未认证的发票如何进项税转出
  • 发票没有银行账号可以吗
  • 不动产进项税额转出
  • 继续教育专项附加扣除可以扣几年
  • 应收会计怎么做
  • sql空值用什么表示
  • mysql常用关键字及其用法
  • mysql数据库的总结
  • mac怎么修改默认应用
  • win10web服务器在哪打开
  • 微软反盗xp黑屏怎么办
  • 程序中map是什么意思
  • dns win7
  • linux如何使用
  • windows10 禁用u盘
  • 使用jquery实现的项目
  • 基于stm32的100个毕业设计
  • node.js适用哪些场景
  • nodejs mysql orm
  • js选中文字
  • 个体 税务登记
  • 铁岭医保网上怎么交费
  • 银行扣账户维护费会计分录
  • 陕西个体户免税政策
  • 国家税务总局简易征收最新文件
  • 印花税票有什么用
  • 货车违章查哪个部门
  • 契税维修基金交给谁
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设