纯函数

63 阅读2分钟

函数式编程中有一个非常重要的概念叫纯函数,JavaScript符合函数式编程的范式,所以也有纯函数的概念;

在react开发中纯函数是被多次提及的; 比如react中组件就被要求像是一个纯函数(为什么是像,因为还有class组件),redux中有一个reducer的概念,也是要求必须是一个纯函数; 所以掌握纯函数对于理解很多框架的设计是非常有帮助的;

那么什么是纯函数呢。

纯函数的定义

纯函数在维基百科有下面的定义:

在程序设计中,若一个函数符合以下条件,那么这个函数被称为纯函数:

(1)此函数在相同的输入值时,需产生相同的输出。

(2)函数的输出和输入值以外的其他隐藏信息或状态无关,也和由I/O设备产生的外部输出无关。

(3)该函数不能有语义上可观察的函数副作用,诸如“触发事件”,使输出设备输出,或更改输出值以外物件的内容等

简而言之纯函数满足以下特点:

1.函数的输入确定,则输出也是确定的。

2.函数在执行的过程,不能有副作用。

什么是副作用

上面提到的副作用表示在执行一个函数时,除了返回函数值之外,还对调用函数产生了附加的影响,比如修改了全局变量,修改参数或者改变外部的存储。 往往开发中出现的bug就是因为疏忽副作用而产生的。函数产生的副作用往往是产生bug的'温床'。

为什么要用纯函数

因为你可以安心的编写和安心的使用。 你在写的时候保证了函数的纯度,只是单纯实现自己的业务逻辑即可,不需要关心传入的内容是如何获得的或者依赖其他的外部变量是否已经发生了修改。

你在用纯函数的时候,你确定你的输入内容不会被任意篡改,并且自己确定的输入,一定会有确定的输出。