JavaScript进阶-函数式编程-纯函数

148 阅读1分钟

纯函数

函数式编程中的函数指的就是 纯函数

纯函数:相同输入永远会得到相同的输出,而且没有任何可观察的副作用

基础案例

// 函数式
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 函数功能也太简单了吧,好像没什么意义啊!我们再举栗子两枚来看看。数组的 slicesplice 就分别是 纯函数非纯函数

  • 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 会改变原数组;

总结

纯函数要有以下特点

  • 必要要有输入和输出
  • 相同的输入要得到相同输出

我们可以发现纯函数一定会有输出。那么是不是可以一个函数的执行结果交给另一个函数去处理呢?