# 走进函数式
# 函数式编程的特征
函数式编程是指为创建不可变的程序,通过消除外部可见的副作用,来对纯函数的声明式的求值过程。
# 函数式编程是声明式编程
声明式编程不同于我们常见的过程式编程,它将程序的描述与求值分离开来,它关注于如何用各种表达式来描述程序逻辑,而不一定要指明其控制流或状态的变化。
# 纯函数
纯函数具有以下性质:
- 仅决定于提供的输入,而不依赖于任何在函数求值期间或者调用间隔时可能变化的隐藏状态和外部状态
- 不会造成超出其作用域的变化,例如修改全局对象或者引用传递的参数
# 引用透明和可置换性
如果一个函数对于相同的输入始终产生相同的结果,那么就说它是引用透明的。
引用透明意味着可以用纯函数产生的值置换这个函数,而不改变结果。
# 存储不可变数据
不可变数据是指被创建后不能更改的数据。
在JavaScript中,基本类型都是不可变的,对象类型是可变的(其实可以冻结成不可变的)。对于一些原型对象上的方法,有的会改变原始数据结构,有的不会,不如push方法就会改变原始数据,但是map方法不会。
# 函数式编程的有点
- 鼓励复杂任务的分解。函数式鼓励将程序分解为单一职责的小程序,同时也会把小程序组合构成复杂应用。
- 使用流式链处理数据。函数链是一种惰性计算程序,当需要时才会执行。
- 复杂异步应用中的相应。响应式函数式编程。