函数式编程的思想是把多步骤的运算操作携程一系列嵌套函数的调用。
本文引用阮一峰大神的几个例子作为说明:
一个数学表达式 : (1 + 2) * 3 - 4
完成可以分为三个步骤:
1. var a = 1 + 2; 2. var b = a * 3; 3. var c = b - 4;
而函数式编程要把多操作映射成嵌套函数。
var result = subtract(multiply(add(1,2), 3), 4);下面理解了大概的意思,就介绍两个和理解Redux源码有关的两个概念。
合成:得到一个结果需要经过n个函数,将这n个函数合并成一个函数的操作叫做函数的合成。
const compose = function (f, g) { return function (x) { return f(g(x)); }; }这是两个函数,如果有三个参数,就可以是
1. compose(f, compose(g, h)) 2. compose(f, g, h) 3. compose(compose(f, g), h)类似于数学中的结合律 3 + 2 + 3 = (3+2)+3 = 3+(2+3)
当然了这是一种思想,理解就行,暂时还没有涉及到代码层面,Redux中有一个函数用到了这个思想,到时候代码的实现我会再次提到。
柯里化:柯里化概念为将多参数函数转换成单参数函数,就像上面的结合律,要向真正实现代码的结合以及保证纯粹性,函数接收的参数最好只有一个。
// 柯里化之前 function add(x, y) { return x + y; } add(1, 2) // 3 // 柯里化之后 function addX(y) { return function (x) { return x + y; }; } addX(2)(1) // 3现在深化到了代码的层面,这里引用了JavaScript中非常经典的使用方式,也是框架中必备的--闭包。这里不做过多的解释。