简单粗暴详细讲解javascript实现函数柯里化与反柯里化

2023-10-29

  函数柯里化(黑人问号脸)???Currying(黑人问号脸)???妥妥的中式翻译既视感;下面来一起看看究竟什么是函数柯里化:
  
  维基百科的解释是:把接收多个参数的函数变换成接收一个单一参数(最初函数的第一个参数)的函数,并返回接受剩余的参数而且返回结果的新函数的技术。其由数学家Haskell Brooks Curry提出,并以curry命名。
  
  概念往往都是干涩且难懂的,让我们用人话来解释就是:如果我们不确定这个函数有多少个参数,我们可以先给它传入一个参数,然后通过JS闭包(如若不懂JS闭包,请先学习闭包知识点再来学习本篇博文  https://www.cnblogs.com/dengyao-blogs/p/11475575.html )来进行返回一个函数,内部函数接收除开第一个参数外的其余参数进行操作并输出,这个就是函数的柯里化;
  
  举个小例子:
  
  场景(需求):
  
  众所周知程序员每天加班的时间还是比较多的,如果我们需要计算一个程序员每天的加班时间,那么我们的第一反应应该是这样;
  
  var overtime=0;
  
  function time(x){
  
  return overtime+=x;

  上面的代码固然没有问题,可是需要每天调用都算加一下当天的时间,很麻烦,并且每调用一次函数都要进行一定的操作,如果数据量巨大,有可能会有影响性能的风险,那么有没有可以偷懒又能解决问题的办法呢?有的!
  
  function time(x){
  
  return function(y){
  
  return x+y;
  
  }
  
  }
  
  var times=time(0);
  
  times(3);
  
  但是上面代码依然存在问题,在实际开发中很多时候我们的参数是不确定的,上面代码虽然简单的实现了柯里化的基本操作,但是对于参数不确定的情况是处理不了的;所以存在着函数参数的局限性;不过我们从上面的代码中基本可以知道函数柯里化是个啥意思了;就是一个函数调用的时候只允许传入一个参数,然后通过闭包返回内部函数去处理和接收剩余参数,返回的函数通过闭包的方式记住了time的第一个参数;
  
  我们再来把代码改造一下:
  
  //  首先定义一个变量接收函数
  
  var overtime = (function() {
  
  //定义一个数组用来接收参数
  
  var args = [];
  
  //这里运用闭包,调用外部函数返回一个内部函数
  
  return function() {
  
  //arguments是浏览器内置对象,专门用来接收参数
  
  //如果参数的长度为0即没有参数的时候
  
  if(arguments.length ===

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单粗暴详细讲解javascript实现函数柯里化与反柯里化 的相关文章

  • Angular6 和 RXJS6 的一些改动

    例一 import Injectable from angular core import Observable from rxjs import User from model User import map from rxjs oper
  • [JavaEE系列] 详解多线程中的CAS及其ABA问题

    文章目录 说在前面 什么是CAS CAS典型的应用场景 1 使用CAS实现原子类 2 使用CAS实现自旋锁 CAS的ABA问题 1 一个ABA问题的例子 2 ABA问题导致出现的BUG 3 ABA问题的解决方案 说在前面 本篇文章是基于前面
  • 详解谷歌最强NLP模型BERT(理论+实战)

    作者 李理 环信人工智能研发中心vp 十多年自然语言处理和人工智能研发经验 主持研发过多款智能硬件的问答和对话系统 负责环信中文语义分析开放平台和环信智能机器人的设计与研发 本文是作者正在编写的 深度学习理论与实战 的部分内容 导语 Goo
  • 电动汽车整车动力参数匹配app。 电机外特性曲线绘制 集成matlab界面小程序

    电动汽车整车动力参数匹配app 电机外特性曲线绘制 集成matlab界面小程序 内容 已知电动汽车整车参数 求解电机主要工作点 并绘制外特性曲线 包括 界面和带可编辑源码 2019版以上打开 推出的App 后期替换GUI功能 另外程序描述比
  • Cocos2dx-demo演示项目:Part1

    这个项目 我主要是用来积累 记录自己在利用cocos2dx引擎进行项目开发 学习实践中的开发经验 每天的开发任务 查看别人分享的内容 总是能够收获到可取的东西 将这些可取的东西自己再着手开发一次 能够进一步深刻理解这些 同时今后如果碰到类似
  • Caocao's Bridges 【HDU - 4738】【Tarjan求桥(割边)】

    题目链接 在赤壁之战中 曹操被诸葛亮和周瑜击败 但他不会放弃 曹操的军队仍然不善于水战 所以他提出了另一个想法 他在长江建造了许多岛屿 在这些岛屿的基础上 曹操的军队很容易攻击周瑜的部队 曹操还建造了连接岛屿的桥梁 如果所有岛屿都通过桥梁相
  • 生命在于折腾——SQL注入的实操(六)less26-30

    一 实操环境 1 操作系统 VMware虚拟机创建的win10系统 内存8GB 硬盘255GB 处理器AMD Ryzen 9 5900HX 2 操作项目 sql lib项目 本篇文章介绍关卡26 30 3 工具版本 phpstudy 8 1
  • windows7 64位机上CUDA7.0配置及在VS2010中的简单使用举例

    1 查看本机配置 查看显卡类型是否支持NVIDIA GPU 选中计算机 gt 右键属性 gt 设备管理器 gt 显示适配器 NVIDIA GeForce GT 610 从https developer nvidia com cuda gpu
  • OpenCV常见算法实现(一)- 椒盐噪声

    椒盐噪声的实现非常简单 原理就是把一幅图像里面的像素随机变成黑色或者白色 所以椒盐名字就是这么来的 先看代码 int noise coeff 5 for int k 0 k lt image rows image cols k int j
  • YOLOv8遇见VisDrone 2023目标检测挑战赛-YOLOv8实战VisDrone无人机目标检测(视频教程)

    课程链接 https edu csdn net course detail 38688 VisDrone 2023目标检测挑战赛 http aiskyeye com challenge 2023 和 ICCV 2023 顶会联合举行 用于检
  • 只需5步 真·双开电脑版微信

    最近发现 有些小伙伴不仅有双开手机版微信的需求 同时也有电脑版的需求 今天教大家一个方法 简单好用 只需要跟着图片操作 5步即可 快一起来试试吧 1 下载安装ProcessExplorer 2 右键以管理员身份运行procexp exe 3
  • 关于产品MVP的定义与实践

    MVP是什么 MVP minimum viable product 最小化可行产品 概念最早由埃里克 莱斯提出 刊载于哈弗商业评论 并有出版物 精益创业 作用 MVP是进行一种小样调研 快速进入市场 接触客户并得到反馈 透过反馈不断修改原型
  • 数据库的可用监控

    监控 数据库是否连接和读写以及数据库的连接数 1 确认数据库是否可以通过网络连接 造成连接不成功的原因 防火墙 TCP IP连接被占满 监控的方式 1 mysqladmin u 监控用户 p 密码 h 监控的服务器地址 ping 首先我们在
  • C/C++宏定义中的#

    在C C 中 宏定义是由define完成的 define中有三个特殊的符号值得我们注意 1 在宏展开的时候会将 后面的参数替换成字符串 如 define p exp printf exp 调用p asdfsadf 的时候会将 exp换成 a
  • Hive 安装、配置、数据导入和使用

    Hive 安装 配置 数据导入和使用 Hive 下载 Hive 的环境 Hive 配置 Hive 数据导入 总结 Hive 下载 首先到Apache Hive TM下载软件 随便写一个 都比较慢 下载二进制文件 Hive 的环境 首先将下载
  • 算法-暴力递归

    暴力递归 public class HanNuoTa public static void hannuo int n if n gt 0 function n 左 右 中 public static void function int i
  • LeetCode题目笔记--7.整数反转

    题目描述 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 示例 1 输入 123 输出 321 示例 2 输入 123 输出 321 示例 3 输入 120 输出 21 注意 假设我们的环境只能存储得下 32 位的有
  • ElasticSearch系列(四)ES集成IK分词器以及使用方式

    文章目录 一 标准分词器 二 IK分词器 2 1 下载安装 2 2 测试效果 2 3 自定义词库 ES的分词器会把我们查询使用的字符串进行分词 同时也会把要查询的目标数据进行分词 然后进行匹配 一 标准分词器 ES默认自带的分析器 是标准分
  • 自己的一项发明专利已获国家知识产权局授权,另外在数据挖掘、海量数据处理领域的两项发明专利已启动申报

    从1999年攻读研究生就开始数据库 数据仓库的研究与开发 2002年毕业后 一直从事于海量数据的处理与分析 数据挖掘 数据仓库设计与应用开发 至今不觉已经20年了 20年期间自己在2006年就推出了跨数据库平台的客户端系统工具软件 万能数据
  • Windows10上编译MXNet源码操作步骤(Python)

    1 按照https blog csdn net fengbingchun article details 84997490 中操作步骤首先在Windows上通过VS2017编译MXNet源代码 2 从 https mxnet incubat

随机推荐