curry函数的作用

通俗地讲,curry函数可以将需要接收多个参数的函数变成只接收一个参数的函数,比如把f(a,b,c)变成f(a)(b)©。这样做的好处是:
1、便于函数的参数复用,比如当传入的多组数据的a、b相同时,只需要let curryF = curry(f)(a,b) 然后多次调用curryF(c1)、
curryF(c2)…即可
2、延迟执行,类似于bind方法,返回一个函数便于之后调用,而不是立即执行

curry的特点

1、调用curry函数将返回一个新的函数newF
2、当调用新的函数newF的时候,如果累计的参数小于原函数所需的参数的数量时,将继续返回函数
3、当累计接收到的参数个数大于或等于原函数所需的时候,将执行原函数

curry的实现思路

1、获取原函数所需的参数个数
2、获取累计得到的参数个数
3、对比二者的数量,判断应该返回新的函数还是原函数的执行结果

curry的具体实现

// 手写curry
function curry(fn,...args){return function(){// console.log("arguments:",arguments)// console.log("args:",args)// args 原来已有的参数// arguments 本次新增的参数// 拼接存储已经获取到的变量let _args = [...args,...arguments]// console.log("拼接后的 _args:",_args)// 与原函数所需的参数个数进行比较if(_args.length < fn.length){// 参数个数还不够,递归,继续返回函数return curry(fn,..._args)}else{return fn.apply(this,_args)}}
}
// 测试一下
function sum(a,b,c){return a+b+c
}
let f = curry(sum)(10,20)
console.log(f(30)) //10+20+30 -> 60
console.log(f(40)) //10+20+40 -> 70
console.log(f(50)) //10+20+50 -> 80

整个代码的核心是闭包和递归,将每次执行的作用域保存在内存中,便于复用。

JavaScript 手写函数柯里化 curry相关推荐

  1. JS高级——纯函数、柯里化(手写自动柯里化函数)、组合函数(手写自动组合函数)

    一.理解JavaScript纯函数 函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式,所以也有纯函数的概念: 在react开发中纯函数是被多次提及的: 比如react ...

  2. JavaScript 专题之函数柯里化

    JavaScript 专题系列第十三篇,讲解函数柯里化以及如何实现一个 curry 函数 定义 维基百科中对柯里化 (Currying) 的定义为: In mathematics and comput ...

  3. 深入理解javascript系列(十七):函数柯里化

    之前的系列,我们介绍了什么是高阶函数.所有以函数作为参数的函数,都可以叫作高阶函数.并且我们常常利用高阶函数来封装一些公共逻辑. 本次,我们要继续学习,继续记录,柯里化.柯里化,其实就是高阶函数的一种 ...

  4. 打造属于自己的underscore系列(五)- 偏函数和函数柯里化

    这一节的内容,主要针对javascript函数式编程的两个重要概念,偏函数(partial application) 和函数柯里化(curry)进行介绍.着重讲解underscore中对于偏函数应用的 ...

  5. 深入详解python高级特性——函数柯里化(Currying)与反柯里化

    前言:本章的内容本来很简单,但是涉及到的理论部分相对较多,想要彻底弄懂前因后果需要具备以下几个知识点, (1)python的高阶函数 (2)python的装饰器本质 (3)Python的functoo ...

  6. 带你看懂javascript函数柯里化(currying)

    1.什么是柯里化 这里参照百度百科: 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技 ...

  7. 【JavaScript】函数柯里化

    文章目录 1. 什么是函数柯里化 2. 柯里化常用场景 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3. 经典例题 3.1 封装通用柯里化函数 3.2 创建一个灵活的多步执行的柯里化函数 3 ...

  8. JavaScript函数柯里化详解

    目录 一.简单了解apply和call 二.什么是函数柯里化? 三.写一个公共的柯里化函数 四.创建一个灵活的柯里化函数 五.写一个可控制的执行时间的柯里化函数 一.简单了解apply和call ca ...

  9. JavaScript 中函数 柯里化风格的运用

    导语 当我第一次看见 柯里化 这个词语的时候,我也表现出一脸懵,在代码程序中,看见这种 "高大上"的一些词汇叫法的时候,下意识的会觉得这个概念很难很深奥,但是当冷静下来,去深究过后 ...

  10. JavaScript函数柯里化

    一.简单了解apply和call call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向. call 和 appl ...

最新文章

  1. tensorflow分布式训练之同步更新和异步更新
  2. 采用Opserver来监控你的ASP.NET项目系列(三、监控你的服务器状态)
  3. bootstrap带有下拉按钮的输入框_关于bootstrap--表单(下拉select、输入框input、文本域textare复选框checkbox和单选按钮radio)...
  4. 服务器上装的hadoop系统,在Ubuntu Server 18.04.1中安装Hadoop系统环境
  5. Windows常用快捷键和Windows CMD命令大全
  6. Python在word的指定位置插入图片
  7. 使用Python生成docx文档
  8. 阿里巴巴的微服务开源之路
  9. 学生计算机类实验项目经费预算,科研项目经费使用预算表.DOC
  10. 不同类型的物联网产品、物联网产品的优势
  11. pycharm中的Run with Python console功能是什么意思?
  12. Java job interview:Linux操作系统的应用(红帽子)分析经验
  13. 对称矩阵特征向量正交的推导
  14. 【源码阅读】GAT:GRAPH ATTENTION NETWORKS
  15. 1055: 兔子繁殖问题 这是一个有趣的古典数学问题,著名意大利数学家Fibonacci曾提出一个问题:有一对小兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。
  16. Kali Linux使用arpspoof命令进行断网攻击(ARP欺骗)
  17. 每日10行代码57: appium测试坚果手机出现socket hang up报错的解决
  18. mysql ssl连接错误_MySQL 5.1.66 SSL连接错误ERROR 2026(HY000)
  19. flex弹性布局教程-07容器属性flex-direction
  20. iconfont与雪碧图的优缺点

热门文章

  1. 由于目标计算机积极拒绝,无法连接。 Could not connect to Redis at 127.0.0.1:6379: 由于目标计算机积极拒绝,无法连接
  2. 树莓派vsftpd 425 Failed to establish connection
  3. 常见的一句话muma
  4. html 复选框事件,HTML复选框选中与未选中触发事件的方法
  5. 需求分析与原型设计———记账软件
  6. java 显示百分比_Java 数字转百分比%
  7. java 聊天室 私聊_使用socket实现网络聊天室和私聊功能
  8. A tale of two viewports — part one
  9. 1015 计算摄氏温度值
  10. Java:获取map的key和value