参考:

https://www.jianshu.com/p/33392cb4b055

https://ruby-china.org/topics/38385

https://stackoverflow.com/questions/36314/what-is-currying

柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,
并且返回接受余下的参数且返回结果的新函数的技术。
这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的。

简单的javascript例子:

function add(x, y){
if(y===undefined){
return (z) => x + z;
}else{
return x+y;
}
} 测试
add(1)(2)和add(1, 2)都返回3.

我理解currying,即乐高模块化,如果要写一个复杂函数,可以分解成单一功能的模块,然后组装在一起。这样每个模块就可以在其他函数进行反复调用了。

例子:

对已知数组的已知量进行加N的操作,传统的写法:

let ar= [1,2,3];
function addToArray(ar,n){
return ar.map((x)=> x+n)
};
console.log(addToArray(ar,1)

但可以这么写:

const add = a => b => a+b;
const addToArray = (ar,n) => ar.map(add(n));
addToArray([2,3],1)

Currying的好处:

上面连个例子结果相同,但过程不一样:

第一是新写了一个函数,对数组进行map操作,

第二则是在直接在map里进行add操作,这很通用,一旦你写了很多类似于add的函数,就会方便起来,可以让我们方便的在map,reduce,filter里调用。

  • 能够进行延迟计算,就像add(1)(2)一样,1比2先传入,2就会被延迟计算,在特定的场景里,有一定的应用意义。
  • 当你发现你要调用一个函数,并且调用参数都是一样的情况下,这个参数就可以被柯里化,以便更好的完成任务。
  • 优雅的写法,允许你写出来的代码更干净、更有表达力。

虽然柯里化在日常应用不多,但仍然是一个不可不了解的好概念。

JavaScript柯里化(currying)的更多相关文章

  1. JS中的柯里化(currying)

    何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字命名). 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参 ...

  2. JS中的柯里化(currying) 转载自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com]

    JS中的柯里化(currying) by zhangxinxu from http://www.zhangxinxu.com 本文地址:http://www.zhangxinxu.com/wordpr ...

  3. js 柯里化Currying

    今天读一篇博客的时候,看都有关柯里化的东西,由于好奇,特意查了一下,找到一篇比较好的文章,特意收藏. 引子先来看一道小问题:有人在群里出了到一道题目:var s = sum(1)(2)(3) .... ...

  4. JAVAScript柯里化、部分应用参数终极理解

    一.柯里化 在定义柯里化.部分应用参数的概念前,首先必须对闭包有深入的了解和定义,闭包一句话说清楚:函数返回值为函数. 柯里化的定义:将多参函数分解为按步骤接受单个参数的函数,如下代码: var mo ...

  5. 前端开发者进阶之函数柯里化Currying

    穆乙:http://www.cnblogs.com/pigtail/p/3447660.html 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接 ...

  6. 函数柯里化(Currying)示例

    ”函数柯里化”是指将多变量函数拆解为单变量的多个函数的依次调用, 可以从高元函数动态地生成批量的低元的函数.可以看成一个强大的函数工厂,结合函数式编程,可以叠加出很BT的能力.下面给出了两个示例,说明 ...

  7. js的柯里化currying

    转载:http://www.zhangxinxu.com/wordpress/2013/02/js-currying/ 我自己的理解柯里化就是这样的,(1)必须返回匿名函数,(2)参数复用. 1. 参 ...

  8. 柯里化currying + 隐式调用 = 一个有名的add面试题

    柯里化 =================================== 维基百科解释: 柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参 ...

  9. javascript 柯里化

    先看一下代码 function add(){ var sum=0; for(var i=0;i<arguments.length;i++){ sum+=arguments[i]; } retur ...

随机推荐

  1. LESSON 7- High Rate Quantizers and Waveform Encoding

    1.      The Lloyd-Max algorithm is hill-climbing algorithm 第六节最后提出一个好的quantizer必须满足Lloyd-Max条件,但满足Ll ...

  2. hdoj1520(入门树形dp)

    题目链接:https://vjudge.net/problem/HDU-1520 题意:和luogu那道没有上司的舞会一样的题,给定一棵带点权的树,父结点和子结点不能同时选,问怎么选使得权值和最大,求 ...

  3. Infix to Prefix conversion using two stacks

    Infix : An expression is called the Infix expression if the operator appears in between the operands ...

  4. (0)c++入门——认识指针与数组——指针即是内存中地址。

    初识指针 首先需要了解一个概念,计算机的内存(或者说是寄存器)都是有地址的. <c++ primer plus>一书P37中提到这样一个概念:为把信息存储在计算机中,程序必须记录3个基本属 ...

  5. RESTful、共用接口、前后端分离、接口约定的实践 (转)

    出处:  某小公司RESTful.共用接口.前后端分离.接口约定的实践 前言 随着互联网高速发展,公司对项目开发周期不断缩短,我们面对各种需求,使用原有对接方式,各端已经很难快速应对各种需求,更难以提 ...

  6. jenkins+docker+git+etcd实现应用配置文件管理

    两台机器: 一台机器安装gitlab: http://www.cnblogs.com/cjsblogs/p/8716932.html 另一台机器安装etcd+docker+jenkins jenkin ...

  7. Java 日志系统

    Java 日志系统 1. 创建日志记录器 private final Logger logger = LoggerFactory.getLogger(LoggerTest.class); 2. 打印日 ...

  8. python 小数精度控制

    可以用:round(数值,保留小数位数) 详情参考 https://www.cnblogs.com/herbert/p/3402245.html

  9. CSS——font使用方法

    <style> p{ /*font-style: italic;/*设置字体为斜体*/ font-variant: small-caps; font-weight: bolder;/*设置 ...

  10. 解决FileInputStream 读取文件中文乱码问题(转)

    当Java中使用 FileInputStream 读取txt等文档时,中文会产生乱码,解决方法如下: try { fis = new FileInputStream(file); InputStrea ...