先說一下函數返回結果的肯定性和不肯定性,觀察如下兩個函數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
正確地使用純函數能夠產生更加高質量的代碼。而且也是一種更加乾淨的編碼方式。