函数柯里化

用于创建一个已经设置好了一个或或者多个参数的函数

通用写法如下:

function curry(fn){var args = Array.prototype.slice.call(arguments, 1);return function(){var innerArgs = Array.prototype.slice.call(arguments);var finalArgs = args.concat(innerArgs);return fn.apply(null, finalArgs);}
}
function add(num1, num2){return num1 + num2;
}
var curriedAdd = curry(add, 5);
console.log(curriedAdd(3));

利用函数柯里化的实例1:

实现函数 functionFunction,调用之后满足如下条件: 1、返回值为一个函数 f 2、调用返回的函数
f,返回值为按照调用顺序的参数拼接,拼接字符为英文逗号加一个空格,即 ‘, ’ 3、所有函数的参数数量为 1,且均为 String 类型

function functionFunction(str) {var args=Array.prototype.slice.call(arguments,0);var f=function(){var args_f=Array.prototype.slice.call(arguments,0);args_f=args.concat(args_f);return functionFunction.apply(this,args_f);}f.valueOf=function(){return args.join(", ");}f.toString=function(){return args.join(", ");}return f;}

利用函数柯里化的实例2:

已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:
1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
4、调用 c 之后,返回的结果与调用 fn 的返回值一致
5、fn 的参数依次为函数 a, b, c 的调用参数

function curryIt(fn) {//获取fn参数的数量var n = fn.length;//声明一个数组argsvar args = [];//返回一个匿名函数return function(arg){//将curryIt后面括号中的参数放入数组args.push(arg);//如果args中的参数个数小于fn函数的参数个数,//则执行arguments.callee(其作用是引用当前正在执行的函数,这里是返回的当前匿名函数)。//否则,返回fn的调用结果if(args.length < n){return arguments.callee;}else return fn.apply("",args);}}

函数柯里化的几个例子相关推荐

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

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

  2. 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化

    js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...

  3. JavaScript 专题之函数柯里化

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

  4. [转载] 纯函数和函数柯里化

    参考链接: 用示例编写Java柯里化Currying函数 文章目录 纯函数什么是纯函数纯函数例子非纯函数例子 函数柯里化函数柯里化简单例子参数复用 纯函数 什么是纯函数 如果函数的调用参数相同,则永远 ...

  5. 高级函数技巧-函数柯里化

    我们经常说在Javascript语言中,函数是"一等公民",它们本质上是十分简单和过程化的.可以利用函数,进行一些简单的数据处理,return 结果,或者有一些额外的功能,需要通过 ...

  6. bind函数返回值-1_javascript函数柯里化

    函数柯里化 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术.这个技术由 Chris ...

  7. 深入详解python高级特性——函数柯里化(Currying)与反柯里化

    前言:本章的内容本来很简单,但是涉及到的理论部分相对较多,想要彻底弄懂前因后果需要具备以下几个知识点, (1)python的高阶函数 (2)python的装饰器本质 (3)Python的functoo ...

  8. JS - 函数柯里化

    一.概念 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数. 简单来说,柯里化是一种函数的转换,它是指将一个函数从可调用的 ...

  9. 函数柯里化的作用一:参数复用(正则匹配案例)

    什么是函数柯里化 currying? 做题时看到 currying 这个词还挺有意思的,本意是咖喱,翻译为中文叫柯里化,是因为是以逻辑学家 Haskell Curry 命名的. arity(参数个数) ...

最新文章

  1. spring cloud (一、服务注册demo_eureka)
  2. 适配器模式之对象适配器
  3. flash as3笔记1
  4. Javascript 刷新框架及页面的方法汇总(转)
  5. wex5 导入mysql_【分享】WeX5的正确打开方式(7)——数据组件详解
  6. 爬虫学习---基础操作--抽屉新热榜自动点赞与豆瓣自动统一短评
  7. jzoj3457. 【NOIP2013模拟联考3】沙耶的玩偶
  8. 个人管理 - 如何演讲
  9. SpringBoot+Vue 微信支付API V3
  10. 图解网络硬件 资料分享
  11. 2021-02-02美赛前MATLAB的学习笔记(机器学习(分类、聚类、深度学习))
  12. LuaAuxLib 按键精灵lua库
  13. 知乎神回复:计算机专业学成什么样,才算“大学没白读“?
  14. Python全栈开发【第一篇】:初识Python
  15. ctpn、east阅读要点记录
  16. 隐藏你的C2(使用域前置技术隐藏C2服务器,以及使用iptables策略来保护服务器)
  17. 区块链底层平台FISCO BCOS的网络压缩功能如何?
  18. luogu2161 SHOI2009 会场预约
  19. 东京奥运会的网络安全竞赛,顶级黑客的王者之战
  20. Ubuntu 系统 日常操作小技巧一_字体, 文件大小、查询,僵尸进程,搜狗乱码,mount remount,清空磁盘

热门文章

  1. AMD将用FPGA干什么?
  2. Win7更换锁屏壁纸
  3. 第15篇 2D绘图(五)绘制图片
  4. 在.NET实现邮件收发功能(包含源代码)
  5. 24岁小伙跟女友回家 与41岁准丈母娘畸恋私奔
  6. 两个质数互质是_科学网—理解黎曼猜想(二)两个自然数互质的概率是多少? - 袁岚峰的博文...
  7. ensp搭建dhcp服务
  8. c语言 字符串switch,C++中如何对字符串进行switch
  9. Pandas实现列表分列与字典分列的三个实例
  10. Word文档如何从中间某一页开始设置页码