共计 851 个字符,预计需要花费 3 分钟才能阅读完成。
纯函数是函数式编程的根底,也是一个程序员所必备的基础知识,若你对纯函数还不是特地理解,那么一起来学习一下吧!
一、纯函数的概念
纯函数是这样一种函数,即雷同的输出,永远会失去雷同的输入,而且没有任何可察看的副作用。
从纯函数的定义,能够提取出纯函数的必要条件:
- 雷同的输出保障雷同的输入(这个容易了解);
- 不会产生副作用(可查看如下内容:什么是副作用);
- 函数外部不会依赖和影响内部的任何变量。
什么是副作用
副作用是在计算结果的过程中,零碎状态的一种变动,或者与内部世界进行的可察看的交互。
副作用可能蕴含,但不限于:
- 更改文件系统
- 往数据库插入记录
- 发送一个 http 申请
- 可变数据
- 打印 /log
- 获取用户输出
- DOM 查问
- 拜访零碎状态
理解了纯函数的概念后,咱们来看个示例:
// impure
var a = 10;
function add(b) {return a + b;}
下面这个示例不是纯函数,因为它依赖函数内部变量 a,若 a 产生了变动,它的返回值也会发生变化。若咱们稍加批改,将 a 作为函数的一个入参,就是一个纯函数了。
// pure
function add(a + b) {return a + b;}
二、纯函数的长处
- 可缓存。后果能够被缓存,因为雷同的输出总会取得雷同的输入;
- 可测试。更加容易被测试,因为它们惟一的职责就是依据输出计算输入;
- 可多并发。多线程环境下并行操作共享的内存数据很可能会出现意外状况。纯函数不须要访问共享的内存数据,所以在并行环境下能够任意运行纯函数。(尽管 JS 是单线程,然而 ES6 当前有一个 Web Worker,能够开启一个新线程)
- 没有副作用。纯函数不会批改作用域之外的状态,做到这一点,代码就变得足够简略和清晰:当你调用一个纯函数,你只有关注它的返回值,而不必放心因为别处的问题导致谬误。
三、纯函数利用的某些案例
- 例如数组的一些根本办法: sort, map, filter, concat, slice, reduce 等都是纯函数。
- 置信很多小伙伴都应用过 Lodash,它是一个一致性、模块化、高性能的 JavaScript 实用工具库,也是纯函数的代表。
正文完
发表至: javascript
2022-01-02