你是否知道 JavaScript 其实也是一个函数式编程语言呢?本文将教你如何利用 JavaScript 的函数式特性。
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
函数式编程,属于编程范式的一种
1 函数是第一公民,可以返回值,也可以作为其他函数的参数
- //console是一个函数
- function con(v){
- console.log(v)
- }
- // execute 也是一个函数
- function execute(fn){
- fn(1)
- }
- //将con函数作为参数传进execute函数
- execute(con) // 1
2 接近自然语言的写法
晓池吃完饭然后就去洗澡 可以表现为 eat().bathe()
- // 吃饭函数
- function eat(eat){
- this.e = eat;
- return this;
- }
- // 洗澡函数
- function bathe(bathe){
- this.b = bathe;
- return this;
- }
- var person = eat("晓池在吃饭").bathe("晓池去洗澡了");
- console.log(person.e) // 晓池在吃饭
- console.log(person.b) // 晓池去洗澡了
3 函数式编程的特性
匿名函数,即没有名字的函数,在函数式编程中很常见,有时候我们需要通过它(不复用的函数)来完成部分功能,下面我们通过定义一个 each 函数来了解一下:
- // 自定义each函数
- function each(arr, func) {
- var length = arr.length;
- for (var i = 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函数,并返回一个函数
- function add(num){
- return function(x){
- return num + x;
- }
- }
- add1 = add(1)
- console.log(add1(3)) // 4
高阶函数:有函数作为参数或函数内部返回一个函数,都可称该函数为高阶函数 ,以上的 each 函数即算是高阶函数的一种。
结束语
实际的应用中,不会囿于函数式或者面向对象,通常是两者混合使用,事实上,很多主流的面向对象语言都在不断的完善自己,比如加入一些函数式编程语言的特征等,JavaScript 中,这两者得到了良好的结合,代码不但可以非常简单,优美,而且更易于调试。
来源: