总是会看见 纯函数(pure function )这个名词,但是都不知道什么是纯函数,它与一般函数的区别是什么?
- 相同的输入,永远会得到相同的输出
Fure Function 的返回值,只能由其函数入参所决定,而不能有其他的干扰因素
例如:
var number=3;
function add ( n ) {
return n+number;
}
这里add函数的返回值不仅由参数n决定,还由外部变量number决定,当改变外部变量number的值时,对传入相同的n值,并不能得到相同的返回值,所以add不是纯函数。
Pure Function 在计算返回值的时候不会产生副作用(Side Effect)
什么是副作用?
副作用是在计算结果的过程中,系统状态的一种改变,或是外部世界可观察的交互作用。
例如I/O 操作,修改函数入参或函数外部的变量,抛出异常,发送http请求等,只要与function外部环境发生交互作用的都是副作用。就 JavaScript 而言,我们常用的 console.log() 函数 – 会输出内容到控制台,用来生成随机数的 Math.random() – 会改变全局的 seed……
纯函数的优点
每个 Pure Function 的运行结果都是可重现的。这样的好处就是 Pure Function 十分容易进行测试 – 因为这完全是一个透明的盒子。