命令式 和 声明式
1 | // 命令式 |
1 | // 声明式 |
纯函数(引用透明度Referential Transparency)
纯函数
- 函数的执⾏过程完全由输⼊参数决定,不会受除参数之外的任何数据影响
- 函数不会修改任何外部状态,⽐如修改全局变量或传⼊的参数对象
非纯函数
- 改变了参数
- 改变了全局变量
- DOM或者AJAX操作
- 读取用户输入,抛出异常
数据不可变(Immutable)
- 数据一旦产生,就不可以发生变化(Immutable)。
es6中的const只是规定了变量不可发生变化,但是变量引用的对象自身可以改变。
发展历史
- 函数式编程想要实现需要有一层软件模拟来实现数学家们设想的模型,但是在当时的硬件条件下是不被允许的。
- 硬件的飞速发展,性能的大幅提升,让开发者们开始关注软件的可维护性,可测试性。
- 函数式编程却能够让⼤部 分开发者不需要操⼼任务处理,所以⾮常适合分布式计算的场景
面向对象 和 函数式
面向对象
优点
- 因为通过定义类的⽅法,可以控 制对数据的操作。
缺陷
- ⾯向对象编程提供了⼀种持续编写烂 代码的⽅式,它让你通过⼀系列补丁来拼凑程序。
- 不知道对象是如何变为当前状态的,因为每一个方法都有可能修改状态。无法预知如果修改了当前状态会导致哪些地方发生变化。
函数式
优点
- 声明式,纯函数,数据不可变。
缺点
- 难度,性能
