Pure Function 翻譯為純函數,是指相同的輸入,永遠會得到相同的輸出,而且沒有任何副作用也不依賴任何外部狀態。Day21提到的curry(柯里化)也是Pure Function。
在計算結果的過程中,系統狀態的一種改變,或是外部可觀察的交互作用。有些函數的參數是一種輸入/輸出作用的參數,就是函數可能改變參數裡面的內容,把一些資訊透過輸入參數,夾帶帶外界,這種情況嚴格來說也是副作用
依賴外部狀態是什麼意思呢,來看看以下範例:
let b = 1
testFunc(a) {
b = a
}
以上範例就依賴function外部的變數,所以這就是不純粹的函式,其實在JavaScript中不純粹的函式很常見,像是console.log或alert,因為會在瀏覽器輸出,也是一種副作用
而pure function 最典型的就是根據輸入來做快取計算(跟柯里化一樣)
var Number = multiply(function(){
return x*x;
});
Number(2); //4
Number(4); //16
Number(6); //36
從外界獲取資料,或者向外部輸出資料,那麼該函數就不是純函數,叫做非純函數(Impure Function)