浅谈javascript函数式编程
函数式编程,属于编程范式的一种
1函数是第一公民,可以返回值,也可以作为其他函数的参数
//console是一个函数 functioncon(v){ console.log(v) } //execute也是一个函数 functionexecute(fn){ fn(1) } //将con函数作为参数传进execute函数 execute(con)//1
2接近自然语言的写法
晓池吃完饭然后就去洗澡可以表现为eat().bathe()
//吃饭函数 functioneat(eat){ this.e=eat; returnthis; } //洗澡函数 functionbathe(bathe){ this.b=bathe; returnthis; } varperson=eat("晓池在吃饭").bathe("晓池去洗澡了"); console.log(person.e)//晓池在吃饭 console.log(person.b)//晓池去洗澡了
3函数式编程的特性
匿名函数,即没有名字的函数,在函数式编程中很常见,有时候我们需要通过它(不复用的函数)来完成部分功能,下面我们通过定义一个each函数来了解一下:
//自定义each函数 functioneach(arr,func){ varlength=arr.length; for(vari=0;i<length;i++){ func(i,arr[i]) } } //执行each函数,传进一个匿名函数作为该函数的参数 each([1,2,3],function(i,v){ console.log('key:'+i+',value:'+v); }); //输出内容 //key:0,value:1 //key:1,value:2 //key:2,value:3
柯里化:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术
//定义add函数,并返回一个函数 functionadd(num){ returnfunction(x){ returnnum+x; } } add1=add(1) console.log(add1(3))//4
高阶函数:有函数作为参数或函数内部返回一个函数,都可称该函数为高阶函数,以上的each函数即算是高阶函数的一种。
结束语
实际的应用中,不会囿于函数式或者面向对象,通常是两者混合使用,事实上,很多主流的面向对象语言都在不断的完善自己,比如加入一些函数式编程语言的特征等,JavaScript中,这两者得到了良好的结合,代码不但可以非常简单,优美,而且更易于调试。