纯粹的功能
函数式编程的一个基本原则是它避免改变应用程序状态(无状态)和变量范围之外的变量(不变性)。
纯函数是以下功能:
- 对于给定的输入,始终返回相同的输出
- 他们不依赖于范围之外的任何变量
- 他们不修改应用程序的状态( 没有副作用 )
我们来看看一些例子:
纯函数不得更改其范围之外的任何变量
不纯的功能
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
的函数结果不依赖于其范围之外的任何变量。