js函数式编程

Posted 小码农的成长之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js函数式编程相关的知识,希望对你有一定的参考价值。

本文介绍两种函数式编程的方法:

①compose

compose函数也叫组合函数,有以下几个特征:

①接收的参数都是函数

②除了最后一个函数参数外,其他函数接收的实参都是上一个函数的返回值

③函数是从右往左执行的

④返回一个函数

举个例子

function sum(a,b){  return a+b;}function sub(b){ return 10-b;}function compose(f1,f2){  return function(a,b){    return f1(f2(a,b))  }}let x=compose(sub,sum)let y=x(3,6//y=1

compose的应用场景也多,例如koa就使用了compose将多个函数组合在一起,实现洋葱模型。

下面实现一个通用的compose

function compose(){  let start=arguments.length-1; let arg=arguments; return function(){ if(start<0)return; let result=arg[start].call(this,...arguments);   while(start>0){      result=arg[--start].call(this,result) } return result; }}

②函数柯里化

和compose函数类似,它也是返回一个函数 

举个例子

 //普通函数function add(x,y){ return x+y;} //函数柯里化function CurryingAdd(x){ return function(y){ return x+y; }}add(1,2) //3CurryingAdd(1)(2//3

函数柯里化的好处是可以实现参数复用,例如第一个参数相同,第二个参数不同,就可以复用:

let x=CurryingAdd(1);x(2);x(3);

最后实现一个通用的柯里化函数

function add(x,y,z){return x+y+z}
function curry(fn){      var arr=[] var len=fn.length; function test(){          arr=arr.concat(...arguments);          if(arr.length<len){ return test; }          return fn.apply(this,arr)      } return test; } let fn=curry(add);  fn(1,2)(3);//6


以上是关于js函数式编程的主要内容,如果未能解决你的问题,请参考以下文章

代码简化改进秘籍,JS函数式编程技巧

函数式编程/命令式编程

《On Java 8》中文版 第十三章 函数式编程

JS函数式编程

视频从Cycle.js谈函数式与响应式编程

js函数式编程基础:高阶函数柯理化函数合成Loadash