1. 什么是函数式编程

  • 函数式编程是一种编程范式;编写程序的时候以函数为主,程序函数化;
  • 函数式编程是一种编程风格;期望是用计算来表示程序,用计算的组合来表达程序的组合;
  • 函数式编程是一种思维模式:关心的是数据怎么被处理的;

    2. 纯函数

    纯函数可以理解为没有副作用和引用透明的组合,同时还可以再加上一个不严谨的判断依据;只接收一个参数,只返回一个值。同时纯函数是独立的,那么在执行顺序上是与程序结果是无关的,这样在执行并发的时候也不会有大问题。 包含很多技术点和特性:

  • 函数是一等公民

  • 匿名函数
  • 闭包
  • 柯里化
  • 惰性求值
  • 参数多态

    没有副作用

    函数编程不依赖外部的状态也不修改外部的状态:

  • 没有改变变量

  • 没有打印控制台或其他
  • 没有读取写入文件、数据库等
  • 没有抛出异常

    3. 代码实现

    柯里化函数实现

    ```javascript // ES5 function curry(fn, arr = []) { return fn.length === arr.length ? fn.apply(null, arr) : function(…args) { return curry(fn, arr.concat(args)) } }

// ES6 const curry = (fn, arr = []) => { fn.length === arr.length ? fn(…arr) : (…args) => { curry(fn, […arr, …args]); } }

  1. <a name="nv4Sp"></a>
  2. ### 4. 偏函数
  3. > 偏函数是固定一个函数的一个或者多个参数,也就是将一个n元函数转换成一个n-x元函数
  4. > 柯里化是将一个多参数函数转换成多个单参数函数,也就是将一个n元函数转换成n个一元函数 f(a, b, c)转化为f(a)(b)(c)
  5. ```javascript
  6. curryAdd = Curry(Add);
  7. AddBySeven = curryAdd(7);
  8. AddBySeven(5)(10);