我们依旧从需求入手,只有知道我们要干嘛,才能一步步引导我们堆砌出万丈高楼。
先看下面的代码:

         function add(x,y){return x+y}console.log(add(3,1))//4

如果我们想这样执行add(3)(1)也能输出4,我们该怎么做.我们从这个函数调用可以知道,函数调用了两次,并且调用第一次后返回的是函数才能再调用,第一次调用传入了参数,第二次调用也传入了参数,并把两次传入的参数加起来了。因此我们有:

      function add(x){return function(y){return x+y}}console.log(add(3)(1))//4

延伸到我们另一个需求,我们假设let testNumber=regNumber(/\d+/),然后testNumber(‘123abd’),testNumber(‘abc’)来判断传入的参数是不是满足正则,明显真的能实现这样的函数的话,好处是,我们只要写一次正则判断,后面就不用写了,很方便。依据这个需求我们可以这样写:

     function regNumber(reg,str){return function (str){return reg.test(str)}}let testNumber=regNumber(/\d+/g)console.log(testNumber('123abc'))//trueconsole.log(testNumber('abc'))//false

回到前面的add函数,如果我们想调用多少次就多少个相加呢,比如add(1)(2)(3)(4)…要达到1+2+3+…加到想要的效果我们应该怎么做呢,这明显是调用了一个函数之后又返回一个函数,因此我们可以定义一个函数返回自己,最后用toString隐式转换的特性,当最后执行时隐式转换,并计算最终的值返回,代码如下:

function add() {let args = [...arguments]let _adder = function () {args.push(...arguments)return _adder}_adder.toString = function () {//利用隐式转换最后执行return args.reduce(function (a, b) {return a + b;});}return _adder}console.log(add(1)(2)(3))//6

到这里我们好像都没有说过什么是柯里化,从上面我们可以看出,柯里化有调用的时候可以别的函数不一样,它是一个个的调用的,形容f(x)(y)(z)…这种。所以今后看到这样调用函数的相比是运用里柯里化,而函数内部可可想到一直return 回函数,最后一个return就是想要的结果。

函数柯里化(curry)相关推荐

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

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

  2. JavaScript 专题之函数柯里化

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

  3. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

  4. 高级函数技巧-函数柯里化

    我们经常说在Javascript语言中,函数是"一等公民",它们本质上是十分简单和过程化的.可以利用函数,进行一些简单的数据处理,return 结果,或者有一些额外的功能,需要通过 ...

  5. bind函数返回值-1_javascript函数柯里化

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

  6. 函数柯里化的几个例子

    函数柯里化 用于创建一个已经设置好了一个或或者多个参数的函数 通用写法如下: function curry(fn){var args = Array.prototype.slice.call(argu ...

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

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

  8. 从一道面试题认识函数柯里化

    最近在整理面试资源的时候,发现一道有意思的题目,所以就记录下来. 题目 如何实现 multi(2)(3)(4)=24? 首先来分析下这道题,实现一个 multi 函数并依次传入参数执行,得到最终的结果 ...

  9. JS - 函数柯里化

    一.概念 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数. 简单来说,柯里化是一种函数的转换,它是指将一个函数从可调用的 ...

  10. 函数柯里化的作用一:参数复用(正则匹配案例)

    什么是函数柯里化 currying? 做题时看到 currying 这个词还挺有意思的,本意是咖喱,翻译为中文叫柯里化,是因为是以逻辑学家 Haskell Curry 命名的. arity(参数个数) ...

最新文章

  1. DirectX903D 颜色
  2. 总结一下qsort()函数的使用与注意
  3. Effective C++笔记(一)——条款26-29
  4. Android高级模糊技术RenderScript和FastBlur
  5. .NET开源MSSQL、Redis监控产品Opserver之安全配置
  6. Linux学习笔记--导航(CentOS 7)
  7. 今晚直播丨一次特殊的 Oralce 硬解析性能问题的技术分享
  8. Python编程及应用--数据分析与科学计算可视化培训班
  9. php pm.status path,phpfpm开启pm.status_path配置,查看fpm状态参数
  10. 用C语言写一个函数返回参数二进制中1的个数
  11. Linux网络编程——tcp、udp迭代服务器
  12. iOS内存管理部分内容
  13. 创业计划书学习笔记二——创业计划书的目录结构与执行概览部分的写作方法
  14. 华为星环大数据_星环大数据平台介绍,盘点星环大数据和华为大数据
  15. 大数据经典实验案例-WordCount原理详解和代码书写
  16. 第二人生的源码分析(三十八)构造一个消息包并发送
  17. 商标注册成功后的中肯建议
  18. tplink 文件服务器,tplink云服务器
  19. Oracle:sqlplus命令行登录方法 as sysdba
  20. android 分屏切换流程,一种切换分屏模式和多窗口模式的方法与流程

热门文章

  1. 跟着老猫来搞GO-内建容器slice
  2. 为什么有人学软件测试连工作都找不到?
  3. 判断字符串中是否具有唯一字符
  4. linux运行fuzzbunch,方程式0day ETERNALBLUE复现之Empire ampamp; Msfconsole下的she...
  5. 计算机控制面板的作用,什么是控制面板;它有什么作用?
  6. 第一台生物计算机,世界上第一台DNA计算机问世
  7. SAP-ABAP-SQL语句中CAST字段类型转换示例,CONCAT连接示例,SUBSTRING截断示例
  8. 机器学习(决策树四)——简述 剪枝
  9. adb基本操作之monkey基本操作入门准备-1
  10. c语言第一行include,[C语言]为什么要有include?——从Hello World说起