目錄 序 1 前言 3 第1章 重構是什么? 13 你如何保證不改變行為? 13 如果不改變行為,重構的目的是什么? 18 重構是什么,不是什么 21 小結 22 第2章 你使用哪種JavaScript? 23 版本與規(guī)范 24 平臺與實現(xiàn) 25 預編譯語言 26 框架 27 庫 29 你需要什么JavaScript? 29 我們在用什么JavaScript? 30 小結 30 第3章 測試 31 為什么測試 34 測試的多種方法 35 工具和流程 43 小結 52 第4章 測試實踐 53 從零開始的代碼 55 采用測試驅動開發(fā)的從零開始的代碼 61 未經測試的代碼與特性測試 80 調試和回歸測試 85 小結 93 第5章 基本重構目標 95 函數塊 98 輸入 101 輸出 106 副作用 109 上下文第一部分:隱式輸入 110 上下文第二部分:隱私 116 小結 128 第6章 重構基本結構 130 示例代碼132 我們的信心策略 135 重命名 137 無用的代碼 142 變量 148 字符串 157 使用數組:循環(huán)、forEach、映射 161 小結 167 第7章 重構函數與對象 168 示例代碼(改進后) 168 數組和對象的替代品 171 測試我們所擁有的 179 提取函數185 用全局對象簡化API 192 小結 246 第8章 層次結構中的重構 247 關于“CRUD應用”和框架247 構建層次結構 248 破壞層次結構 256 繼承與結構 264 Has-A關系 270 繼承反模式 271 小結 280 第9章 重構到面向對象模式 281 模板方法282 策略 285 狀態(tài) 288 空對象 295 包裝(裝飾器和適配器) 302 外觀 310 小結 313 第10章 重構異步 315 為什么用異步? 315 修復金字塔厄運 318 回調和測試 326 Promises 330 小結 336 第11章 函數式重構 337 函數式編程的限制和好處 338 基礎 344 高級基礎358 Burritos 369 學習和使用Burritos 383 從OOP遷移到FP 385 小結 390 第12章 結論 392 附錄A 進一步閱讀和資源 393