函數式編程?利用函數把運算過程封裝起來,通過組合各種函數來計算結果。 ...
本文不涉及深層次的解析,僅作為知識點的查閱。因為概念介紹的比較簡單,所以只適合有一定基礎的人群閱讀。
1、什麼是函數式編程?
利用函數把運算過程封裝起來,通過組合各種函數來計算結果。(將一套業務流程分割成多個功能,每個功能都用函數封裝起來,最後實現這個業務其實就是在調用這些功能函數,這就是函數式編程)
2、一些與函數式編程相關的概念
- 純函數 - 指的是函數無副作用,相同的輸入(函數參數)有相同的輸出(函數返回)
- 閉包 - 存在內、外兩層函數,內層函數對外層函數的局部變數進行來引用。(用途:定義一些作用域局限的持久化變數)
- 遞歸 - 在函數內部調用函數自身。(非常消耗記憶體,易產生棧溢出錯誤,解決:嚴格模式下,採用尾調用;正常模式下,改為迴圈)
- 尾調用 - 某個函數的最後一步是調用另一個函數,僅調用,不能有其他操作,但是參數可以
- pointfree - 不使用要處理的值的形參,只合成運算過程,可以使代碼更加清晰(就是將一些通用的函數,組合出各種複雜運算,省略掉中間不必要的參數變數)
- 柯里化 - 把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受餘下的參數而且返回結果的新函數的技術(官文翻譯有點抽象,就是說把有多個參數的函數變成只有一個參數的函數,這個函數返回一個新函數,這個新函數接受剩餘的參數並且返回最後的結果,這個過程就叫做柯里化)
// 普通的add函數 function add(x, y) { return x + y } // 柯里化後 function curryingAdd(x) { return function (y) { return x + y } } add(1, 2) // 3 curryingAdd(1)(2) // 3
- 高階函數 - 一個函數以函數為參數,或以函數為返回值,或這兩種行為都有。