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) //3
CurryingAdd(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函数式编程的主要内容,如果未能解决你的问题,请参考以下文章