一、概念
用代码表达数学函数的概念。
只用表达式,不用语句。不存在 if else 这样的分支代码概念,用三元表达式代替。
区别于方法,方法是操作对象的function。函数式编程没有绑定this。
一切函数式编程的理论都以纯函数为基础,所以:
- 没有副作用
- 不修改状态,因为不污染函数外的数据
- 相同的输入返回相同的输出
- 具有幂等性:对于一个传入一个数 返回一个数的纯函数,包裹执行多次,结果均形同,例如Math.abs(Math.abs(-1))
- 偏应用函数:参数为一个函数和这个函数的参数,以创建一个新函数,可以等到该执行的时候再执行,例如 柯里化。
- 函数组合
。。。
二、拓展
高阶函数:将函数作为参数返回一个新函数。
react里函数组件构成的高阶组件,类似于普通函数构成的高阶函数。
高阶组件:
- 比我为一个组件本身获取不到某个数据,我有一个公共的组件,专门用于获取这个数据。
- 当我把我的组件传入高阶组件后,高阶组件会将数据包裹给我的组件,然后返回一个新的组件。
- 它的好处是分离业务和视图层。
反柯里化
应用场景是,一次性把所有参数传入,执行最终结果。
三、范畴、容器
函数,在这里的概念就是对数据的映射关系,即数学上的f(x),这就是范畴。
范畴论就是使用这些映射函数表达数据之间的对应关系。
一个范畴与另一个范畴的对应转换,涉及到了函子。 函子本身就是一个容器。
函子:一般的数据对象,可以认为是一个容器。为这些容器设计特定的操作方法,就变成了函子。
在redux中,创建一个 store,就是创建了一个函子。