JavaScript函数式编程思想

更多详情

内容简介: 本书主要介绍了函数式编程的基础理论、核心技术、典型特征和应用领域,以及它与面向对象编程的比较。本书既广泛介绍函数式编程的思想,也结合JavaScript的特点分析其应用和局限,注重从本质和内在逻辑的角度解释各个主题,并辅以相关的代码演示。对于函数式编程涉及的JavaScript语言本身的特性,以及与面向对象编程的比较,在书中也给予了重点讨论。


目录: 第 1章 名称 1
1.1 名称绑定 1
1.2 作用域 3
1.2.1 包块作用域与就近声明 5
1.2.2 静态作用域和动态作用域 7
1.2.3 前向引用和提升 9
1.3 闭包 10
1.4 小结 14
第 2章 类型系统 15
2.1 类型是什么 15
2.2 常用的数据类型 16
2.2.1 整数 16
2.2.2 浮点数 16
2.2.3 布尔值 17
2.2.4 字符 17
2.2.5 元组、结构体、类 17
2.2.6 函数 19
2.2.7 数组、字符串、队列、堆栈、
列表 20
2.2.8 结构体、映射 22
2.2.9 深入复合类型 23
2.3 强类型与弱类型 24
2.4 名义类型与结构类型 26
2.5 静态类型与动态类型 27
2.5.1 静态类型 27
2.5.2 动态类型 30
2.6 多态性 32
2.6.1 子类型多态性 33
2.6.2 参数多态性 35
2.7 JavaScript的类型系统 38
2.7.1 undefined和null 39
2.7.2 弱类型 43
2.7.3 变成强类型 47
2.8 鸭子类型与多态性 52
2.9 小结 53
第3章 lambda演算和函数 54
3.1 命令式编程中函数的作用 54
3.2 lambda演算 57
3.2.1 定义 57
3.2.2 记法 58
3.2.3 化约 58
3.2.4 算数 59
3.2.5 逻辑运算 61
3.2.6 函数式编程的特点 61
3.3 JavaScript中的函数 62
3.3.1 定义函数 63
3.3.2 调用函数 71
3.3.3 传递参数 71
3.3.4 模块 74
3.4 小结 75
第4章 函数是一等值 76
4.1 函数参数 76
4.1.1 数组的迭代方法 77
4.1.2 设计函数参数 78
4.2 函数返回值 81
4.2.1 判断数据类型 82
4.2.2 日志 83
4.2.3 读取对象属性 85
4.3 高阶函数 86
4.3.1 组合谓词函数 87
4.3.2 改变函数参数数目 89
4.3.3 检查参数类型 91
4.3.4 记忆化 94
4.4 小结 98
第5章 部分应用和复合 100
5.1 部分应用 100
5.2 柯里化 103
5.2.1 增强的柯里化 106
5.2.2 从右向左柯里化 108
5.2.3 进一步增强的柯里化 109
5.2.4 柯里化的性能成本 111
5.2.5 应用柯里化的方式 113
5.2.6 参数的顺序 115
5.2.7 柯里化与高阶函数 115
5.3 复合 118
5.3.1 管道与数据流 122
5.3.2 函数类型与柯里化 124
5.4 一切都是函数 126
5.4.1 操作符的函数化 127
5.4.2 方法的函数化 132
5.4.3 控制流语句的函数化 138
5.5 性能与可读性 141
5.6 小结 142
第6章 副作用和不变性 144
6.1 副作用 144
6.2 纯函数 145
6.2.1 外部变量 147
6.2.2 实现 148
6.2.3 函数内部的副作用 148
6.2.4 闭包 151
6.3 不变性 152
6.3.1 哲学上的不变性与身份 152
6.3.2 简单类型与复合类型 153
6.3.3 值类型与引用类型 154
6.3.4 可变类型与不可变类型 155
6.3.5 可变数据类型的不足之处 156
6.3.6 克隆与冻结 158
6.3.7 不可变的数据结构 163
6.3.8 不可变的映射与数组 167
6.3.9 不可变类型的其他好处 170
6.4 小结 171
第7章 递归 172
7.1 调用自身 173
7.1.1 递归的思路 176
7.1.2 带累积参数的递归函数 177
7.2 递归的数据结构 180
7.2.1 构建列表 180
7.2.2 树 184
7.3 递归与迭代 186
7.3.1 名称 186
7.3.2 理念与对比 186
7.3.3 迭代协议 189
7.3.4 递归协议 192
7.3.5 搜索树 195
7.4 尾部递归 198
7.4.1 调用堆栈 198
7.4.2 尾部调用优化 200
7.4.3 怎样算是尾部调用 201
7.4.4 尾部递归 204
7.5 递归的效率 205
7.6 小结 209
第8章 列表 211
8.1 处理列表 211
8.1.1 函数的三种写法 211
8.1.2 处理列表的高阶函数 213
8.2 函数式编程的列表接口 218
8.2.1 没有副作用的方法 219
8.2.2 有副作用的方法 220
8.2.3 列表接口中的其他函数 222
8.3 小结 225
第9章 从面向对象到函数式编程 226
9.1 面向对象编程的特点 226
9.1.1 封装性 227
9.1.2 继承性 227
9.1.3 多态性 228
9.2 JavaScript面向对象编程 232
9.2.1 创建和修改单个对象 233
9.2.2 克隆和复制属性 234
9.2.3 原型 234
9.2.4 建构函数 235
9.2.5 建构函数与类型继承 237
9.2.6 原型与类型继承 242
9.2.7 Proxy与对象继承 245
9.2.8 Mixin 248
9.2.9 工厂函数 251
9.3 函数式编程的视角 255
9.3.1 不可变的对象 256
9.3.2 评判面向对象编程 257
9.4 方法链与复合函数 260
9.4.1 方法链 260
9.4.2 延迟的方法链 264
9.4.3 复合函数 265
9.4.4 函数式的SQL 266
9.5 小结 271