什么是纯函数?

纯函数是学习和理解的最重要的概念之一,特别是如果你对函数式编程感兴趣的话。

纯函数是满足以下两个条件的函数:

  • 给定相同的输入,它总是返回相同的输出。
  • 在函数的作用域之外不会产生任何副作用。

让我们来看一些纯函数和非纯函数的例子:

// 纯函数
const add = (x, y) => x + y;
const concat = (arr, value) => [...arr, value];
const order = arr => [...arr].sort((a, b) => a - b);

// 非纯函数
const addRandom = x => x + Math.random();
const pushConcat = (arr, value) => { arr.push(value); return arr; }
const reorder = arr => arr.sort((a, b) => a - b);

判断一个函数是纯函数还是非纯函数通常很容易。一个简单的技巧是判断一个函数是否可以在不使用其返回值的情况下调用,或者它是否没有返回任何值。这些通常表明一个函数会产生副作用。

纯函数更加可靠和可重用,这反过来使得它们更容易理解。如果条件允许,通常更倾向于使用纯函数而不是非纯函数。