组合(Compose)函数

组合(Compose)函数是在JavaScript开发过程中一种对函数的使用技巧、模式:

  • 比如我们现在需要对某一个数据进行函数的调用,执行两个函数fn1和fn2,这两个函数是依次执行的;
  • 那么如果每次我们都需要进行两个函数的调用,操作上就会显得重复;
  • 那么是否可以将这两个函数组合起来,自动依次调用呢?
  • 这个过程就是对函数的组合,我们称之为组合函数(Compose Function);

举例:

function double(num){return num*2;
}
function square(num){return num**2;
}var calcFn = compose(double,square);//实现组合函数
console.log(calcFn(20));

实现上面例子中的简单的组合函数:

function compose(fn1,fn2){return function(x){return fn2(fn1(x));}
}

compose的实现

function compose(...fns){//遍历所有的原生如果不是函数,那么直接报错var length = fns.length;for(var i = 0 ;i < length; i++){var fn = fns[i];if(typeof fn !== 'function'){throw new TypeError('Expected a function');}}//取出所有的函数一次调用,最终返回一个函数return function(...args){//先获取到第一次执行的结果var index = 0;var result = length ? fns[index].apply(this,args): args;while(++index<length){result = fns[index].call(this,result);}return result;}
}

JavaScript中的组合(Compose)函数相关推荐

  1. JavaScript中的立即执行函数

    原文链接 通常我们声明一个函数有以下几种方式: // 声明函数f1 function f1() {console.log("f1"); } // 通过()来调用此函数 f1();/ ...

  2. 有没有更好的方法在JavaScript中执行可选的函数参数? [重复]

    本文翻译自:Is there a better way to do optional function parameters in JavaScript? [duplicate] This quest ...

  3. JavaScript中的一等公民: 函数(Function)

    1. 函数的基本使用 使用函数声明或者函数表达式创建一个函数 foo(); //foo bar(); //Uncaught ReferenceError: Cannot access 'bar' be ...

  4. 深入理解javascript中的立即执行函数(function(){…})()

    2019独角兽企业重金招聘Python工程师标准>>> javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各 ...

  5. JavaScript中各存在性函数

    JavaScript中有很多表示存在性和从属关系的函数,本文介绍如下几个: 1)有关实例与构造函数原型之间的关系:isPrototypeOf(),Object.getPrototypeOf(); 2) ...

  6. 如何在JavaScript中使用高阶函数

    将另一个函数作为参数的函数,或者定义一个函数作为返回值的函数,被称为高阶函数. JavaScript可以接受高阶函数.这种处理高阶函数的能力以及其他特点,使JavaScript成为非常适合函数式编程的 ...

  7. JavaScript中常用内置函数

    JavaScript中有两种函数:一种是语言内部事先定义好的函数叫内置函数,另一种是自己定义的函数.如下是常用的6种内置函数: eval函数 eval(expr)函数可以把一个字符串当作一个JavaS ...

  8. JavaScript中使用字符串调用函数

    JavaScript中有一种函数的调用方法:使用函数名的字符串来调用 function forTimeout(x, y){ alert(x + y);}function delay(x , y , t ...

  9. JavaScript中的数值转换函数

    1.Number()函数 (1)用于任何数据类型,属于一种转型函数 (2)转型规则 Boolean值,true->1,false->0 数字值,简单的传入和返回 null值,返回0 und ...

最新文章

  1. git搭建局域网服务器
  2. 【学员分享】PMcaff阿德老师精(diao)彩(bao)传道的9条干货
  3. source insight和vim同时使用
  4. linux下json数据解析,Linux下使用jq简单解析json的方法
  5. java gc的特性_Java12新特性 -- 可中断的G1 Mixed GC
  6. matlab中float类型的_Java局部变量类型推断(Var类型)的26条细则
  7. 03-23 卡顿分析
  8. 备份数据库的expdp语句_Oracle数据库备份恢复Data Pump Expdp/Impdp参数详解与案例介绍...
  9. oracle使用between and边界问题
  10. 有赞云支付php接口,Erphpdown wordpress插件集成有赞云支付的接口申请方法[已失效]...
  11. 学习双拼必看:双拼输入法的心得以及快速入门办法
  12. android设备连接打印机,【Android快讯】教你通过Android设备直接连接打印机打印文件...
  13. 3Ds max彻底卸载方法
  14. 商户都在用的进销存软件,哪一个性价比最高?
  15. 可视化实验四:大数据可视化工具—ECharts(二)
  16. Python 根据excel内容批量生成二维码
  17. iPhone/苹果手机不用数据线传输文件到电脑的方法/步骤
  18. 数据路:三人行,必有我师!
  19. Bootstrap分割线和普通分割线
  20. 解决win7 下面 利用docker搭建jitsi-meet测试环境局域网无法访问的问题

热门文章

  1. Boolean类型详解
  2. 递归神经网络LSTM原理——结合实例MATLAB实现
  3. 四旋翼无人机飞控系统设计(PID控制算法)
  4. 2017计算机基础教学大纲,2017级大学计算机基础教学大纲.docx
  5. 奇葩的java代码_聊聊我面试过的一个最奇葩的 Java 程序猿!
  6. Gradle 安装和配置教程
  7. 大话 函数指针 和 指针函数
  8. 国防科技大学计算机cpa,强烈推荐!这些考研院校不歧视本科,特别保护第一志愿!...
  9. Window10升级遇到大坑错误代码:0xc000000e完美解决方案
  10. mahout FpGrowth