函數式編程中有一個非常重要的概念叫純函數,JavaScript符合函數式編程的范式芋齿,所以也有純函數的概念腥寇;
在react開發(fā)中純函數是被多次提及的;
比如react中組件就被要求像是一個純函數(為什么是像沟突,因為還有class組件)花颗,redux中有一個reducer的概念,也是要求
必須是一個純函數惠拭;
所以掌握純函數對于理解很多框架的設計是非常有幫助的扩劝;
純函數的維基百科定義:
在程序設計中,若一個函數符合以下條件职辅,那么這個函數被稱為純函數:
此函數在相同的輸入值時棒呛,需產生相同的輸出。
函數的輸出和輸入值以外的其他隱藏信息或狀態(tài)無關域携,也和由I/O設備產生的外部輸出無關簇秒。
該函數不能有語義上可觀察的函數副作用,諸如“觸發(fā)事件”秀鞭,使輸出設備輸出趋观,或更改輸出值以外物件的內容等。
當然上面的定義會過于的晦澀锋边,所以我簡單總結一下:
確定的輸入皱坛,一定會產生確定的輸出;
函數在執(zhí)行過程中豆巨,不能產生副作用剩辟;
比如說有一個函數計算傳入參數的和 我們傳10 20 他就永遠返回10+20
但是如果本地有個變量40,函數內部對這個變量做相加往扔,它就是10+20+40 但是如果別的地方把40改為50了 那么再次調用函數就是10+20+50贩猎,那么就不是一個純函數?