实现柯里化

柯里化是什么?

把接收多个参数的函数,变成接收一个单一参数(最初函数的第一个函数)的函数,并且返回接受余下的参数,而且返回的结果的新函数的技术。

如果你固定某些参数,你将得到接收余下参数的一个函数。

总结:

  • 只传递给函数一部分参数来调用它,让它返回一个函数去处理剩余的参数;
  • 这个过程就称之为柯里化

例如:

function foo(m, n, x, y) {return m + n + x + y;
}
foo(m + n + x + y)// 柯里化过程
function bar(m) {return function(n) {return function (x) {return function (y) {return m + n + x + y;}}}
}
// 调用
bar(10)(20)(30)(40)

为什么要实现柯里化?

在函数式编程中,我们希望一个函数处理的问题尽可能单一,而不是将一大堆的处理过程交给一个函数来处理;

柯里化就可以用来实现这个过程,可以将每次传入的参数在单一的函数中进行处理,处理完成后在下一个函数中再使用处理后的结果。

例如:

// 实现对错误的日志输出
/*
var log = function(date) {return function(type) {return function(message) {console.log(`[${date.getHours()}:${date.getMinutes()}][${type}]:[${message}]`)}}
}
*/// 利用箭头函数进行优化
var log = date => type => message => {console.log(`[${date.getHours()}:${date.getMinutes()}][${type}]:[${message}]`)
}var nowlog = log(new Date())
newlog("debug")("查找到了新的bug")
newlog("info")("https请求成功")var nowDebuglog = log(new Date())("debug")
nowDebuglog("查找到了新的bug")
nowDebuglog("首页数据获取成功")

用了柯里化后你就会发现,我们可以不必一次性得传递函数的所有参数,可以对函数进行定制化的处理。

这可以称之为函数的单一职责原则,我们可以用过柯里化的设计,在一个函数里做一件事情。

怎么实现

实现柯里化主要是用于实现以下两点:

  • 柯里化后的函数可以分批接收参数。
  • 柯里化的函数会生成新函数,将剩余的参数返回一个新的函数接收。

柯里化实现:

我们将要对下面这样一个函数(add)实现柯里化。

function add(num1, num2, num3) {console.log(this, num1 + num2 + num3)
}var curryadd = mjyCurrying(add) // mjyCurrying() 函数将模拟实现柯里化的过程
curryadd(10, 20, 30) // 一次性接收全部参数
curryadd.call('111',10, 20, 30) // 可以通过call改变this指向
curryadd(10)(20)(30) // 分批接收参数
curryadd(10)(20,30) // 分批接收参数

mjyCurrying 函数通过递归实现模拟柯里化过程

function mjyCurrying(fn) {function curried(...args) {// 如果参数第一步就传递够了if ( args.length >= fn.length ) {// 有可能在调用的时候需要改变this指向,我们这里用进行this的绑定return fn.call(this, ...args)} else {// 参数不够,需要返回一个新的参数,继续来接收剩余的参数(对curried进行回调)function callback_curried(...args2) {return curried.call(this, ...args, ...args2)}return callback_curried}}return curried
}

声明

  • 本文属于读书笔记一类,是作者在学习 《深入JavaScript高级语法》 coderwhy老师课程途中,以视频中内容为蓝本,辅以个人微末的道行“填写”完成,推荐购买原课程观看,定有收获
  • 欢迎大佬斧正

JavaScript实现柯里化函数相关推荐

  1. JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式

    JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...

  2. export function函数传参_04 js高阶函数(惰性函数、柯里化函数、compose函数)和单例设计模式...

    高阶函数的定义 在<javascript设计模式和开发实践>中是这样定义的. 函数可以作为参数被传递: 函数可以作为返回值输出. 结合这两个特点,首先想到的肯定是回调函数,回调函数也是高阶 ...

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

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

  4. 函数式编程 -- 纯函数、柯里化函数

    文章内容输出来源:拉勾教育 大前端高薪训练营 前言 学习函数式编程,要知道什么是纯函数,使用纯函数的好处,了解有关副作用的相关信息,以及纯函数相关的功能库Lodash,还有什么是函数的柯里化. 一.纯 ...

  5. js学习总结----柯里化函数

    柯里化函数函数思想:一个JS预处理的思想->利用函数执行可以形成一个不销毁的私有作用域的原理,把需要预先处理的内容都存在这个不销毁的作用域中,并且返回一个小函数,以后我们执行的都是小函数,在小函 ...

  6. 【react】---函数化编程的理解,柯里化函数及返柯里化函数的理解...

    虚拟DOM  与 js概念的理解 01.纯函数的理解: 02.柯里化函数 编写一个函数add(3)(4)(5)  得出结果  12    //通过柯里化  函数就可以实现 一个函数内,执行过程中,返回 ...

  7. 实现一个 柯里化函数

    实现一个 柯里化函数 首先我们来了解一下 什么叫做 柯里化函数: 函数柯里化,就是可以将一个接受多个参数的函数分解成多个接收单个参数的函数的技术,直到接收的参数满足了原来所需的数量后,才执行原函数** ...

  8. 认识柯里化函数及其应用

    认识柯里化函数及其应用 维基百科中的定义 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数 ...

  9. 柯里化函数(Currying),什么是柯里化,为什么要进行柯里化,高级柯里化函数的实现

    柯里化(Currying) 柯里化(Currying)是一种关于函数的高阶技术.它不仅被用于 JavaScript,还被用于其他编程语言. 柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, ...

最新文章

  1. asp.net 播放flash
  2. Vue实现仿音乐播放器9-更多按钮实现数据匹配
  3. 数据库自治服务DAS年度新版本:”数据库自动驾驶“进入规模化时代
  4. cad图层管理插件_设计大神CAD常用七个插件你会用几个?
  5. python列表数据类型一致_python自学——数据类型之列表
  6. Android必学之数据适配器BaseAdapter
  7. python开发跟淘宝有联系没_Python爬取淘宝店铺和评论
  8. 语音识别系统报告_2018-2024年中国语音识别系统行业市场发展格局及投资价值评估研究报告_中国产业信息网...
  9. 图解Java设计模式
  10. 方剂学(综合练习)题库【1】
  11. 用 JavaScript 实现一个 TicTacToe 游戏 —— 编程训练
  12. 俱乐部2006年的首次活动-ASP.NET Webpart 开发交流会暨2005回顾
  13. H77、Z75、Z77主板有什么区别?
  14. Linux页高速缓存与文件读写
  15. CocosStudio(八)AtlasLabel数字标签、BitmapLabel自定义字体、Label文本框
  16. elementui select选中获取整个item对象以及回显
  17. 小C实例也有大梦想——自定义strlen函数
  18. 国家队入场,中国数字资产交易市场或将迎来新一轮“洗牌”
  19. 诺基亚如何利用计算机上网,诺基亚S60怎么通过笔记本的WIFI上网?
  20. 硬件设计【1】——光耦的基本原理及TLP521使用

热门文章

  1. 安装SQL 无法连接服务器或手动无法启动SQL服务器
  2. 解决打开谷歌浏览器主页显示桔梗网的问题
  3. MEF 基础简介 四
  4. 计算机网络在音乐软件的应用,软网推荐:简单音乐软件 不凡播放管理
  5. 《乌合之众》思维导图及优秀读后感
  6. FQDN and NetBios
  7. ie兼容问题,强制使用ie浏览器使用最高版本内核
  8. 【NumPy 数组连接、拆分、搜索、排序】
  9. php 批量下载图片的一个小程序
  10. 装备制造企业数字化转型白皮书(2022年)