curry概念: 只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

你可以一次性地调用curry函数,也可以每次只传一个参数分多次调用。

var add = function(x) {return function(y) {return x + y;};
};var increment = add(1);
var addTen = add(10);increment(2);
// 3addTen(2);
// 12

面试有可能会遇到类似add(2)(3)(4, 5) = 14这种问题,其实就应用了柯里化

我们来实现一版最简单的:

var curry = function(fn) {var args = [].slice.call(arguments, 1);return function() {return fn.apply(this, args.concat([].slice.call(arguments)));}
}

我们可以这样使用:

function add(a, b) {return a + b;
}// 用法1
var addCurry = curry(add, 1, 2);
addCurry(); // 3// 用法2
var addCurry = curry(add, 1);
addCurry(2); // 3// 用法3
var addCurry = curry(add);
addCurry(1, 2) // 3

但这种还是不能解决add(2)(3)(4, 5)  = 14

我们继续实现一版:

var curry = function(fn, args) {var length = fn.length, // 获取形参个数args = args || [];return function() {var newArgs = args.slice(0).concat([].slice.call(arguments));// 判断实参参数个数是否大于或等于形参个数if(newArgs.length >= length) {return fn.apply(this, newArgs);}else {return curry.call(this, fn, newArgs);}}
}

下面就可以利用这个函数解决add(2)(3)(4, 5)的问题了:

相关系列文章:

js函数式编程之pointfree

js函数式编程之代码组合(compose)

js函数式编程之柯里化(curry)

js函数式编程之偏应用函数 (Partial Application)

参考资料: JS 函数式编程指南

js函数式编程之柯里化(curry)相关推荐

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

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

  2. golang函数式编程之柯里化

    golang柯里化实现 直接上代码 // 定义可柯里化函数形式 type function func(...interface{}) interface{}// 通用柯里化函数 func (f fun ...

  3. 函数式编程之一柯里化

    什么是柯里化? 柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数的函数 下面来看一个案例,两值相加: 柯里化之前(常见用法) function add(x, y) {return ...

  4. java8函数式编程笔记-科里化

    java函数式编程-科里化 什么是函数? 在数学上,函数的定义为"它接受零个或多个参数,生成一个或多个结果" 而在java8中,函数的定义为像数学函数一样没有副作用的函数 复制代码 ...

  5. 什么是函数式编程,函数合并与柯里化又是什么意思?

    函数式编程在耳边回响了多年,今天就来详细了解一下它吧. 函数式编程的主要特征是:函数是一等公民.它建议大家写纯函数.没有副作用的函数. 讨论完纯函数的内容,我们会看一下最重要的应用:函数的柯里化. 纯 ...

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

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

  7. JavaScript 专题之函数柯里化

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

  8. JS函数式编程思维:柯里化、闭包

    偏函数(Partial Application): 探讨柯里化之前,我们先聊一聊很容易跟其混淆的另一个概念--偏函数(Partial Application).在维基百科中,对 Partial App ...

  9. JS函数curry(柯里化)

    原文地址:http://blog.jobbole.com/77956/ 什么是柯里化? 柯里化是这样的一个转换过程,把接受多个参数的函数变换成接受一个单一参数(译注:最初函数的第一个参数)的函数,如果 ...

  10. 使用C#体验函数式编程之——Currying(柯里化)

    前言 上次,我们尝试了函数式编程中的Partial application(局部应用). Partial Application是函数式编程中一个很常见的模式,它通过固定一个函数的部分参数,产生一个参 ...

最新文章

  1. php动态生成apk渠道包,Android自动生成渠道包
  2. 关于dataTables 的排序问题
  3. 密码技术应用--AES文件加解密
  4. 玩转微服务日志框架Logback
  5. 公办低分二本_河南最适合“二本”考生的30所公办大学,录取分低,考生不要错过...
  6. 计算机启动与故障修复工具,Windows7异常启动的故障修复
  7. 啊哈C语言课后练习题
  8. matlab聚类分析工具箱,matlab聚类工具箱
  9. 项目经理最核心的能力是什么?
  10. 2-1.基金的募集,交易与登记
  11. B2B企业越早做网络营销会有哪些优势 由上海添力张进老师讲解
  12. Arcgis根据矢量道路数据来提取道路中心线
  13. 为什么手机有卡却突然显示无服务器,手机突然显示“无服务”,原因是什么?...
  14. 2022钉钉发布会|云钉低代码新模式、新能力、新机遇
  15. MiniGUI编程指南
  16. PID调谐方法:根据开环响应特性调谐(一)
  17. AMA指标代码逐一解释,附源码(python)
  18. 草草们的忧伤:环信IM昵称和头像
  19. urllib的parse模块
  20. 战争磨盘十三:重整旗鼓

热门文章

  1. java encode_java的web开发中URLEncoder.encode方法
  2. 计算机多媒体设备维护维修,学校多媒体教学设备的故障检修
  3. 魔兽世界燃烧的远征最新服务器,魔兽世界怀旧服人口普查最新2021 5月服务器阵营比例介绍...
  4. SEO优化工具,查询死链VisualSEOStudio-2.0.2.3
  5. 黑盒测试中的因果图约束条件解释
  6. Java后台调用高德地图api返回{status:0,info:UNKNOWN_ERROR,infocode:20003}
  7. 太原市山大附中2021年高考成绩查询,太原40所高中高考喜报汇总!
  8. linux 分卷压缩及解压缩
  9. 穷人和富人的距离0.05厘米
  10. arm9芯片包括哪些?arm9如何应用?