定义
纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。
所以我们可以看出纯函数的定义:
相同输入必定能得出相同输出。
函数执行过程中没有任何副作用。
辨认纯函数
/**
* 下面例子是个正例(Positive ),
* 我们可以看出slice函数输入相同的情况下输出必定相同,
* 而且并不会对array造成影响(内部元素并不会变化)并且也不会对其他环境造成可预见的影响,
* 所以我们可以说slice是纯函数
**/
let array = [0,1,2,3,4];
array.slice(0,3);//[0,1,2]
array.slice(0,3);//[0,1,2]
console.log(array);//[0,1,2,3,4]
/**
* 下面例子是个反例(negative),
* 可以看见纵使输入相同输出是不定的,
* 并且函数修改了原始数组(副作用),
* 这是个完美的非纯函数
**/
let array2 = [0,1,2,3,4];
array.splice(0,3);//[0,1,2]
array.splice(0,3);//[3,4]
console.log(array);//[]
从上面的例子就能很容易看出所谓副作用就是:
在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互
副作用可能包含,但不限于:
更改文件系统
往数据库插入记录
发送一个 http 请求
可变数据
打印/log
获取用户输入
DOM 查询
访问系统状态
参考博客: