(共566篇)
全部分类

js函数式编程
[ JS基础 ] 

忘记是在那里看到“函数式编程”这一词,这里记录一些我对“函数式编程”的理解

函数式编程,是一种“编程范式”,也就是说是一种编写程序的方法,属于“结构式编程”的一种。目的在于把运算过程写成一系列嵌套的函数,从而让程序目的更加明了,使用更加简单。

1.函数式编程要求只用“表达式”,不用“语句”

“表达式”值得是既有运算,又能返回一个结果的运算,“语句”只有运算,没有返回值。函数式编程,要求每一个子程序,毒都要返回一个特定的结果

2.没有副作用

没有副作主要体现在:函数执行的过程中,不会修改外部变量的值。这样我们在编写程序的时候,就不需要考虑其他函数执行可能引起的变量改变的影响。

3.引用透明

“引用透明”一次引用于大神阮一峰的文章函数式编程初探。函数式编程在执行的过程中,不仅不会影响外部变量,更重要的是他不会使用外部变量,永远只使用传递进来的参数,且遵循“传入同一个参数,返回相同的结果”这一原则。

先看下面的案例:

假设我们需要计算 1+4-5+6-7 的结果,一般情况下我们会这样实现:

1
2
3
4
var a = 1 + 4;
a = a - 5;
a = a + 6;
a = a - 7;

虽然能实现我们想要的结果,但这看起来有点杂乱(这里是以运算符为例,所以没有那么复杂,如果是其他的一些复杂计算,就不知道每一步在做什么了),那么函数式编程是什么样子的?

1
2
3
4
5
6
7
8
sum: function(a, b){
    return a+b
},
sub: function(a,b){
    return a-b
}

sub(sum(sub(sum(1,4),5),6),7)     // -1

这样就是函数式编程了吗?怎么觉得过程更复杂了呢?我们来修改一下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
var calcultor = {
    init: function (a) {
        this.tmp = a;
        return this;
    },
    sum: function (b) {
        this.tmp += b;
        return this;
    },
    sub: function (c) {
        this.tmp -= c;
        return this;
    },
    value: function () {
        return this.tmp;
    },
};
calcultor.init(1).sum(4).sub(5).sum(6).sub(7).value();

我们把每一个函数执行后都返回 calculate 本身,来实现链式调用,是不是就能清晰的看出来每一步都做了些什么。

初级开发者最常用的链式调用就是 jquery 了,jquery 中就是通过链式调用来让开发者更能容易的去实现自己的目的。

函数是变成还有一个重要的应用方式,那就是“柯里化编程”,具体的请看柯里化编程