函數(shù)式編程中有一個非常重要的概念叫純函數(shù),JavaScript符合函數(shù)式編程的范式,所以也有純函數(shù)的概念;
在react開發(fā)中純函數(shù)是被多次提及的;
比如react中組件就被要求像是一個純函數(shù)(為什么是像,因為還有class組件),redux中有一個reducer的概念,也是要求
必須是一個純函數(shù);
所以掌握純函數(shù)對于理解很多框架的設計是非常有幫助的;
純函數(shù)的維基百科定義:
在程序設計中,若一個函數(shù)符合以下條件,那么這個函數(shù)被稱為純函數(shù):
此函數(shù)在相同的輸入值時,需產(chǎn)生相同的輸出。
函數(shù)的輸出和輸入值以外的其他隱藏信息或狀態(tài)無關,也和由I/O設備產(chǎn)生的外部輸出無關。
該函數(shù)不能有語義上可觀察的函數(shù)副作用,諸如“觸發(fā)事件”,使輸出設備輸出,或更改輸出值以外物件的內(nèi)容等。
當然上面的定義會過于的晦澀,所以我簡單總結(jié)一下:
確定的輸入,一定會產(chǎn)生確定的輸出;
函數(shù)在執(zhí)行過程中,不能產(chǎn)生副作用;
比如說有一個函數(shù)計算傳入?yún)?shù)的和 我們傳10 20 他就永遠返回10+20
但是如果本地有個變量40,函數(shù)內(nèi)部對這個變量做相加,它就是10+20+40 但是如果別的地方把40改為50了 那么再次調(diào)用函數(shù)就是10+20+50,那么就不是一個純函數(shù)?