纯函数
函数式编程中的函数指的就是 纯函数
纯函数:相同输入永远会得到相同的输出,而且没有任何可观察的副作用
基础案例
// 函数式
function add(n1, n2) {
return n1 + n2;
}
add(2, 3); // 5
add(2, 3); // 5
add(2, 3); // 5
add(2, 3); // 5
可以看到不管执行多少次 add 函数,只要使用相同的参数,得到的结果永远是相同。所以上面的 add 就是一个纯函数
但是我们发现 add 函数功能也太简单了吧,好像没什么意义啊!我们再举栗子两枚来看看。数组的 slice 和 splice 就分别是 纯函数 和 非纯函数
slice返回数组中的指定部分,不会改变原数组。splice对数组进行操作后返回该数组,会改变原数组。
数组的 slice
const arr = [1, 2, 3, 4, 5, 6];
// 纯函数 slice
console.log(arr.slice(0, 2)); // [ 1, 2 ]
console.log(arr.slice(0, 2)); // [ 1, 2 ]
console.log(arr.slice(0, 2)); // [ 1, 2 ]
数组的 splice
const arr = [1, 2, 3, 4, 5, 6];
// 非纯函数 splice
console.log(arr.splice(0, 2)); // [ 1, 2 ]
console.log(arr.splice(0, 2)); // [ 3, 4 ]
console.log(arr.splice(0, 2)); // [ 5, 6 ]
通过观察控制台打印的数据,可以看到 slice 在相同的输入下始终得到的是相同输出。而 splice 确实相反的结果。所以 slice 是纯函数,splice 不是纯函数。
slice不会改变原数组;splice会改变原数组;
总结
纯函数要有以下特点
- 必要要有输入和输出
- 相同的输入要得到相同输出
我们可以发现纯函数一定会有输出。那么是不是可以一个函数的执行结果交给另一个函数去处理呢?