redux源码分析:什么是纯函数
redux 中的 reducer 希望是一个纯函数,那么这个概念来源是什么
定义
- 相同的输入永远会得到相同的输出
- 没有任何可观察的副作用
- 简单来说,一个函数的返回结果只依赖于它的参数,并且在执行过程里面没有副作用,我们就把这个函数叫做纯函数。
- 纯函数条件之一:不得修改传入的参数
优点
- 方便缓存:因为纯函数对相同的输入始终有相同的结果,所以可以把纯函数的结果缓存起来
- 测试方便:因为我们的纯函数,始终有输入和输出,而单元测试,其实就是在测试这个函数的结果,所以我们的纯函数都是可测试的函数
- 并行处理
- 在多线程环境下并行操作共享的内存数据很可能会出现意外情况
- 纯函数不需要访问共享的内存数据,所以在并行环境下可以任意运行纯函数(Web Worker)
关于副作用
现实开发中,副作用不可能完全禁止,尽可能控制他们在可控范围内发生
参考
https://blog.jerry-hong.com/series/rxjs/thirty-days-RxJS-02/