JavaScript中的純函數

先說一下函數返回結果的肯定性和不肯定性,觀察如下兩個函數dom

function sum(a,b){
    return a + b;
}
let res = sum(1,2); // 3

let num = 1;
function sum2(a,b){
    return a + b + num;
}
res = sum2(1,2); // 4

這兩個函數的主要區別在於sum2依賴了一個外部變量num,當這個外部變量發生變化以後,sum2函數參數不變時,返回結果也會發生變化,那麼sum2函數存在不肯定性。函數

再觀察下面這個函數測試

function sum3(a,b){
    return a + b + Math.random();
}

由於Math.random返回的結果是個隨機數,那麼sum3函數返回的結果也是不肯定的,即sum3函數也存在不肯定性。編碼

而後說一下函數的反作用,觀察如下兩個函數調試

function sum(a,b){
    return a + b;
}
let res = sum(1,2); // 3

let num = 1;
function sum2(a,b){
    num = 2;
    return a + b;
}
let res2 = sum2(num,2); // 5
console.log(num); // 2

能夠看到sum2函數致使了外部的變量發生了變化,這個就是反作用,反作用並非毒藥,某些時候每每是必須的。code

經過以上的幾行簡單的代碼咱們能夠了解到,有些函數的輸出結果只依賴於輸入的參數,而且沒有反作用,這種函數咱們稱之爲純函數。jsx

純函數有利於測試和重構io

使用純函數的一個主要好處是它們能夠直接測試。 若是傳入相同的參數,它們將始終產生相同的結果。console

同時純函數還使得維護和重構代碼變得更加容易。你能夠放心地重構一個純函數,沒必要擔憂沒注意到的反作用搞亂了整個應用而致使終調試地獄。function

正確地使用純函數能夠產生更加高質量的代碼。而且也是一種更加乾淨的編碼方式。