純粹的功能
函數語言程式設計的一個基本原則是它避免改變應用程式狀態(無狀態)和變數範圍之外的變數(不變性)。
純函式是以下功能:
- 對於給定的輸入,始終返回相同的輸出
- 他們不依賴於範圍之外的任何變數
- 他們不修改應用程式的狀態( 沒有副作用 )
我們來看看一些例子:
純函式不得更改其範圍之外的任何變數
不純的功能
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
的函式結果不依賴於其範圍之外的任何變數。