纯粹的功能

函数式编程的一个基本原则是它避免改变应用程序状态(无状态)和变量范围之外的变量(不变性)。

纯函数是以下功能:

  • 对于给定的输入,始终返回相同的输出
  • 他们不依赖于范围之外的任何变量
  • 他们不修改应用程序的状态( 没有副作用

我们来看看一些例子:

纯函数不得更改其范围之外的任何变量

不纯的功能

let obj = { a: 0 }

const impure = (input) => {
  // Modifies input.a
  input.a = input.a + 1;
  return input.a;
}

let b = impure(obj)
console.log(obj) // Logs { "a": 1 }
console.log(b) // Logs 1

该函数更改了超出其范围的 obj.a 值。

纯粹的功能

let obj = { a: 0 }

const pure = (input) => {
  // Does not modify obj
  let output = input.a + 1;
  return output;
}

let b = pure(obj)
console.log(obj) // Logs { "a": 0 }
console.log(b) // Logs 1

该函数没有改变对象 obj 的值

纯函数不得依赖于其范围之外的变量

不纯的功能

let a = 1;

let impure = (input) => {
  // Multiply with variable outside function scope
  let output = input * a;
  return output;
}

console.log(impure(2)) // Logs 2
a++; // a becomes equal to 2
console.log(impure(2)) // Logs 4

这个不纯的函数依赖于在其范围之外定义的变量 a。因此,如果 a 被修改,impure 的功能结果将会不同。

纯粹的功能

let pure = (input) => {
  let a = 1;
  // Multiply with variable inside function scope
  let output = input * a;
  return output;
}

console.log(pure(2)) // Logs 2

pure 的函数结果不依赖于其范围之外的任何变量。