关于javascript:2分钟了解什么是纯函数

46次阅读

共计 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 实用工具库,也是纯函数的代表。

正文完
 0