纯函数是函数式编程的基础,也是一个程序员必须具备的基础知识。如果你对纯函数还不是很了解,那就一起来学习吧!1.纯函数的概念纯函数是这样一种函数,相同的输入总是得到相同的输出,并且没有可观察到的副作用。从纯函数的定义中,可以提炼出纯函数的必要条件:相同的输入保证相同的输出(这个很容易理解);无副作用(见以下内容:什么是副作用);函数内部没有依赖和影响任何外部变量。什么是副作用副作用是在计算结果的过程中系统状态的变化,或与外界可观察到的交互。副作用可能包括但不限于:更改文件系统以将记录插入数据库发送http请求变量数据print/log获取用户输入DOM查询访问系统状态在理解了纯函数的概念之后,让我们看一个example://impurevara=10;functionadd(b){returna+b;}上面的例子不是纯函数,因为它依赖于函数的外部变量a。如果a改变了,它的返回值也会改变。如果我们稍微修改一下,把a作为函数的输入参数,它就是一个纯函数。//purefunctionadd(a+b){returna+b;}其次,纯函数的优点是可以缓存。结果可以缓存,因为相同的输入总是产生相同的输出;可测试的。更容易测试,因为他们唯一的职责是根据输入计算输出;可以多并发。在多线程环境下并行操作共享内存数据很可能会出现意想不到的情况。纯函数不需要访问共享内存数据,因此纯函数可以在并行环境中任意运行。(虽然JS是单线程的,但是ES6之后有了WebWorker,可以新开一个线程)没有副作用。纯函数不会在作用域外修改状态,所以代码变得足够简单明了:当你调用一个纯函数时,你只需要关注它的返回值,而不用担心其他问题导致的错误。3、纯函数应用的一些案例比如数组的一些基本方法:sort、map、filter、concat、slice、reduce等都是纯函数。相信很多小伙伴都用过Lodash。它是一个一致的、模块化的、高性能的JavaScript实用程序库,是纯函数的代表。
