一、以函數(shù)式編程思想實現(xiàn)的庫lambda、underscore?
二、函數(shù)式編程是什么?
函數(shù)式編程是一種編程范式。js 中使用的編程范式還有命令式、依賴原型鏈的面向對象的范式、以及元編程。
函數(shù)式編程:不直接操作變量,對一系列邏輯抽象成函數(shù),再對函數(shù)進行組合,完成系統(tǒng)開發(fā)。
三、函數(shù)式編程的特點?
函數(shù)是一等公民。指的是函數(shù)與其他數(shù)據(jù)類型一樣,處于平等地位,可以賦值給其他變量,也可以作為參數(shù),傳入另一個函數(shù),或者作為別的函數(shù)的返回值
只用"表達式",不用"語句"。"表達式"(expression)是一個單純的運算過程,總是有返回值;"語句"(statement)是執(zhí)行某種操作,沒有返回值
沒有"副作用"。指的是函數(shù)內部與外部互動(最典型的情況,就是修改全局變量的值),產生運算以外的其他結果。函數(shù)式編程強調沒有"副作用",意味著函數(shù)要保持獨立,所有功能就是返回一個新的值,沒有其他行為,尤其是不得修改外部變量的值。
不修改狀態(tài)。
引用透明。引用透明(Referential transparency),指的是函數(shù)的運行不依賴于外部變量或"狀態(tài)",只依賴于輸入的參數(shù),任何時候只要參數(shù)相同,引用函數(shù)所得到的返回值總是相同的。
四、函數(shù)式編程的好處?
代碼簡潔,開發(fā)快速。通用性復用性更高,維護性更好,作用域局限,副作用少。
更方便的代碼管理。函數(shù)式編程不依賴、也不會改變外界的狀態(tài),只要給定輸入?yún)?shù),返回的結果必定相同。因此,每一個函數(shù)都可以被看做獨立單元,很有利于進行單元測試(unit testing)和除錯(debugging),以及模塊化組合。
接近自然語言,易于理解。
易于"并發(fā)編程"。
五、常見的函數(shù)式編程的場景
閉包、偏函數(shù)、柯里化、compose、鏈式調用、高階函數(shù)
六、參考
http://taobaofed.org/blog/2017/03/16/javascript-functional-programing/