第1章 函數式編程簡介 1
1.1 什麼是函數式編程?為何它重要 1
1.2 引用透明性 4
1.3 命令式、聲明式與抽象 5
1.4 函數式編程的好處 7
1.5 純函數 7
1.5.1 純函數産生可測試的代碼 7
1.5.2 閤理的代碼 9
1.6 並發代碼 10
1.7 可緩存 11
1.8 管道與組閤 12
1.9 純函數是數學函數 13
1.10 我們要構建什麼 15
1.11 JavaScript是函數式編程語言嗎 15
1.12 小結 16
第2章 JavaScript函數基礎 17
2.1 ECMAScript曆史 18
2.2 創建並執行函數 19
2.2.1 第一個函數 19
2.2.2 嚴格模式 21
2.2.3 return語句是可選的 22
2.2.4 多語句函數 22
2.2.5 函數參數 24
2.2.6 ES5函數在ES6中是有效的 24
2.3 設置項目 24
2.3.1 初始設置 24
2.3.2 用第一個函數式方法處理循環問題 26
2.3.3 export要點 28
2.3.4 import要點 28
2.3.5 使用babel-node運行代碼 29
2.3.6 在npm中創建腳本 30
2.3.7 從git上運行源代碼 31
2.4 小結 31
第 3 章 高階函數 33
3.1 理解數據 34
3.1.1 理解JavaScript數據類型 34
3.1.2 存儲函數 35
3.1.3 傳遞函數 35
3.1.4 返迴函數 37
3.2 抽象和高階函數 38
3.2.1 抽象的定義 38
3.2.2 通過高階函數實現抽象 39
3.3 真實的高階函數 42
3.3.1 every函數 42
3.3.2 some函數 44
3.3.3 sort函數 44
3.4 小結 48
第 4 章 閉包與高階函數 49
4.1 理解閉包 50
4.1.1 什麼是閉包 50
4.1.2 記住閉包生成的位置 52
4.1.3 迴顧sortBy函數 53
4.2 真實的高階函數(續) 54
4.2.1 tap函數 54
4.2.2 unary函數 56
4.2.3 once函數 57
4.2.4 memoized函數 58
4.3 小結 60
第 5 章 數組的函數式編程 61
5.1 數組的函數式方法 62
5.1.1 map 62
5.1.2 filter 65
5.2 連接操作 67
5.3 reduce函數 71
5.4 zip數組 77
5.5 小結 81
第 6 章 柯裏化與偏應用 83
6.1 一些術語 84
6.1.1 一元函數 84
6.1.2 二元函數 84
6.1.3 變參函數 84
6.2 柯裏化 86
6.2.1 柯裏化用例 87
6.2.2 日誌函數——應用柯裏化 89
6.2.3 迴顧curry 90
6.2.4 迴顧日誌函數 93
6.3 柯裏化實戰 94
6.3.1 在數組內容中查找數字 94
6.3.2 求數組的平方 95
6.4 數據流 96
6.4.1 偏應用 96
6.4.2 實現偏函數 97
6.4.3 柯裏化與偏應用 99
6.5 小結 100
第7章 組閤與管道 101
7.1 組閤的概念 102
7.2 函數式組閤 104
7.2.1 迴顧map與filter 104
7.2.2 compose函數 106
7.3 應用compose函數 106
7.3.1 引入curry與partial 108
7.3.2 組閤多個函數 111
7.4 管道/序列 113
7.5 組閤的優勢 114
7.5.1 組閤滿足結閤律 114
7.5.2 使用tap函數調試 115
7.6 小結 116
第8章 函子 117
8.1 什麼是函子 118
8.1.1 函子是容器 118
8.1.2 函子實現瞭map方法 120
8.2 MayBe函子 121
8.2.1 實現MayBe函子 122
8.2.2 簡單用例 123
8.2.3 真實用例 125
8.3 Either函子 129
8.3.1 實現Either函子 130
8.3.2 reddit例子的Either版本 131
8.4 Pointed函子 134
8.5 小結 134
第9章 深入理解Monad 135
9.1 根據搜索詞條獲取Reddit評論 136
9.2 問題描述 136
9.2.1 實現第一步 138
9.2.2 閤並Reddit調用 141
9.2.3 多個map的問題 144
9.3 通過join解決問題 146
9.3.1 實現join 146
9.3.2 實現chain 148
9.4 小結 151
第10章 使用Generator 153
10.1 異步代碼及其問題 154
10.2 Generator基礎 156
10.2.1 創建Generator 156
10.2.2 Generator的注意事項 157
10.2.3 yield關鍵字 158
10.2.4 done屬性 160
10.2.5 嚮Generator傳遞數據 162
10.3 使用Generator處理異步調用 164
10.3.1 一個簡單的案例 164
10.3.2 一個真實的案例 169
10.4 小結 172
附錄 173
· · · · · · (
收起)