柯里化:把接受多个参数的函数变换成接受单个参数的函数,并且返回准备接受余下参数,还能返回结果的一种技术。

 1 function currying(fn){
 2     var args = Array.prototype.slice.call(arguments, 1);
 3
 4     return function(){
 5         var innerArgs = Array.prototype.slice.call(arguments);
 6         var finnalArgs = args.concat(innerArgs);
 7
 8         return fn.apply(null, finnalArgs);
 9     }
10
11 }
12
13 function add(num1, num2){
14     return num1 + num2;
15 }
16
17 var curriedAdd = currying(add, 2);
18 console.log(curriedAdd(3)); //5

使用柯里化,我们实现一个数字累加的例子:

 1 function currying(fn) {
 2     var _store = [];
 3
 4     return function () {
 5         if (!arguments.length) {
 6             return fn.apply(null, _store);
 7         } else {
 8             _store = _store.concat(Array.prototype.slice.call(arguments));
 9         }
10     }
11
12 }
13
14 function sum() {
15     var total = 0;
16     for (var i = 0, len = arguments.length; i < len; i++) {
17         total += arguments[i];
18     }
19     return total;
20 }
21
22 var addNum = currying(sum);
23
24 addNum(1);
25 addNum(2);
26 addNum(3, 4);
27
28 console.log(addNum()); //10

在多参数的函数中,如果我们想固定其中的一些参数,我们就可以使用函数的柯里化特性。预先将函数的某些参数传入,得到一个简单的函数,预先传入的参数则被保存在闭包中。

转载于:https://www.cnblogs.com/zhouwenhong/p/3949058.html

柯里化(Curing)相关推荐

  1. 浅析 JavaScript 中的 函数 uncurrying 反柯里化

    柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...

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

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

  3. 柯里化思想--JS中的预处理机制

    2019独角兽企业重金招聘Python工程师标准>>> 柯里化思想:就是预处理机制 利用函数执行,可以形成一个"不销毁的私有作用域的原理", 把需要预先处理的内容 ...

  4. swift 学习笔记之在柯里化(Currying)

    有时候我们看到的方法中有很多组的参数,可能会让大家觉得疑惑,其实是因为这个方法使用了柯里化.Swift里可以对方法进行柯里化,也就说有多个参数的方法可以接受第一个参数,然后变成一个接受余下参数并且返回 ...

  5. 【译】理解JavaScript中的柯里化

    译文开始 函数式编程是一种编程风格,这种编程风格就是试图将传递函数作为参数(即将作为回调函数)和返回一个函数,但没有函数副作用(函数副作用即会改变程序的状态). 有很多语言采用这种编程风格,其中包括J ...

  6. reactjs高阶函数和函数柯里化

    高阶函数.函数柯里化 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  7. js高级技巧之柯里化

    2019独角兽企业重金招聘Python工程师标准>>> 核心需要注意两点:参数子集的收集.返回函数 下面见bind的封装中使用到柯里化: function bind (fn, con ...

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

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

  9. 深入理解函数式编程之柯里化

    目录 柯里化定义 柯里化原因 柯里化前奏--需要固定数量参数 实现柯里化--期待固定数量参数 应用柯里化 流程剖析 柯里化定义 在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转化成一系列使 ...

最新文章

  1. java float 加法_JAVA 实现精确的加减乘除运算
  2. 看一眼凌晨四点的哈佛,就会明白中国缺什么
  3. RabbitMQ单个发布确认
  4. 在知乎上泡了这么久,工作、工资、生活还是没有起色是什么原因?
  5. java能写驱动吗_使用纯java jdbc驱动程序实现数据库的连接
  6. 如何从标签创建新分支?
  7. 分享JTooltips 0.2beta版Demo
  8. Programe_Of_Beauty:2.17 数组循环位移
  9. 逐点比较法直线插补MATLAB(四个象限合并)
  10. ARM 是什么,ARM的意思,ARM介绍
  11. 常用API——Object、Objects、StringBuilder
  12. 软件调试系列:软件崩溃篇之内存异常崩溃
  13. 几个简单又实用的配色技巧
  14. Quorum?Quorum!
  15. windows 快捷键之新建文件夹
  16. 计算机辅助英语,计算机辅助英语教学
  17. SSL证书转换:cer转jks,pfx转jks
  18. unity中显示选择题
  19. 快速了解ZigBee的协议栈
  20. 不恋过往 不畏将来丨盘点通付盾的2022!

热门文章

  1. [YTU ]_2736指针练习--输出最大值
  2. C++ for循环跳过某一项求和
  3. Python Split函数的用法总结
  4. Python高效画饼图
  5. 复合五点高斯公式计算(Python实现)
  6. 第三章:3.0 本章内容介绍
  7. Sprint会议记录(第五组)
  8. HDU 5703 Desert 水题 找规律
  9. 《SQL Server企业级平台管理实践》读书笔记——关于SQL Server数据库的备份方式...
  10. Jquery checkbox全选简单用法