柯里化(Curing)
柯里化:把接受多个参数的函数变换成接受单个参数的函数,并且返回准备接受余下参数,还能返回结果的一种技术。
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)相关推荐
- 浅析 JavaScript 中的 函数 uncurrying 反柯里化
柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...
- 打造属于自己的underscore系列(五)- 偏函数和函数柯里化
这一节的内容,主要针对javascript函数式编程的两个重要概念,偏函数(partial application) 和函数柯里化(curry)进行介绍.着重讲解underscore中对于偏函数应用的 ...
- 柯里化思想--JS中的预处理机制
2019独角兽企业重金招聘Python工程师标准>>> 柯里化思想:就是预处理机制 利用函数执行,可以形成一个"不销毁的私有作用域的原理", 把需要预先处理的内容 ...
- swift 学习笔记之在柯里化(Currying)
有时候我们看到的方法中有很多组的参数,可能会让大家觉得疑惑,其实是因为这个方法使用了柯里化.Swift里可以对方法进行柯里化,也就说有多个参数的方法可以接受第一个参数,然后变成一个接受余下参数并且返回 ...
- 【译】理解JavaScript中的柯里化
译文开始 函数式编程是一种编程风格,这种编程风格就是试图将传递函数作为参数(即将作为回调函数)和返回一个函数,但没有函数副作用(函数副作用即会改变程序的状态). 有很多语言采用这种编程风格,其中包括J ...
- reactjs高阶函数和函数柯里化
高阶函数.函数柯里化 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...
- js高级技巧之柯里化
2019独角兽企业重金招聘Python工程师标准>>> 核心需要注意两点:参数子集的收集.返回函数 下面见bind的封装中使用到柯里化: function bind (fn, con ...
- 深入理解javascript系列(十七):函数柯里化
之前的系列,我们介绍了什么是高阶函数.所有以函数作为参数的函数,都可以叫作高阶函数.并且我们常常利用高阶函数来封装一些公共逻辑. 本次,我们要继续学习,继续记录,柯里化.柯里化,其实就是高阶函数的一种 ...
- 深入理解函数式编程之柯里化
目录 柯里化定义 柯里化原因 柯里化前奏--需要固定数量参数 实现柯里化--期待固定数量参数 应用柯里化 流程剖析 柯里化定义 在数学和计算机科学中,柯里化是一种将使用多个参数的一个函数转化成一系列使 ...
最新文章
- java float 加法_JAVA 实现精确的加减乘除运算
- 看一眼凌晨四点的哈佛,就会明白中国缺什么
- RabbitMQ单个发布确认
- 在知乎上泡了这么久,工作、工资、生活还是没有起色是什么原因?
- java能写驱动吗_使用纯java jdbc驱动程序实现数据库的连接
- 如何从标签创建新分支?
- 分享JTooltips 0.2beta版Demo
- Programe_Of_Beauty:2.17 数组循环位移
- 逐点比较法直线插补MATLAB(四个象限合并)
- ARM 是什么,ARM的意思,ARM介绍
- 常用API——Object、Objects、StringBuilder
- 软件调试系列:软件崩溃篇之内存异常崩溃
- 几个简单又实用的配色技巧
- Quorum?Quorum!
- windows 快捷键之新建文件夹
- 计算机辅助英语,计算机辅助英语教学
- SSL证书转换:cer转jks,pfx转jks
- unity中显示选择题
- 快速了解ZigBee的协议栈
- 不恋过往 不畏将来丨盘点通付盾的2022!