• 函数式编程是一种编程范式,和面向对象是并列关系(编程范式:思想+实现方式)

      • 面向对象编程:对现实世界中的事物的抽象,抽象出对象以及对象和对象之间的关系
      • 函数式编程:把现实世界的事物和事物之间的联系抽象到程序世界(对运算过程的抽象)
      • 纯函数:
        • 函数在相同的输入,始终输出相同,函数的输出和输入值以外的其它隐藏信息或状态无关,由I/0设备产生的外部输出无关。
        • 该函数不能有语义上可观察的副作用。比如触发事件等。(如果参数是引用传递,对参数的更改会影像函数以外的数据,不是纯函数)
      • 柯里化

        • 函数降维,利用闭包。将多元函数变为一元函数,多个细粒度的 进行函数组合 成新函数去使用,利于重用。
        • 应用:
          • 固定不常用的参数
          • vue.js源码中使用
            • src/platform/web/patch.js
          • 延迟执行(模拟bind方法)
            1. Function.prototype.myBind = function(context,...args){
            2. return (...rest)=>this.call(context,...args,...rest)
            3. }
      • 函数组合

        • 库 lodash/fp fp.flowRight()
    • 函子
      • 控制副作用(IO),异常处理(Either),异步任务(Task)
      • 库 folktale
        1. //简单的函子示例
        2. class Functor{
        3. static of(value){
        4. return new Functor(value)
        5. }
        6. constructor(value){
        7. this._value = vlaue
        8. }
        9. map(f){
        10. return f(this._value)
        11. }
        12. }