注重体验与质量的电子书资源下载网站
分类于: 云计算&大数据 计算机基础
简介
JavaScript函数式编程思想 豆 0.0分
资源最后更新于 2020-10-27 12:37:36
作者:潘俊
出版社:人民邮电出版社
出版日期:2019-01
ISBN:9787115499936
文件格式: pdf
标签: JavaScript 函数式编程 技术 计算机 前端
简介· · · · · ·
本书由浅入深地介绍函数式编程的思想、技术和特点,分析在JavaScript中如何有效运用它。全书共分9章,先后介绍了函数式编程有关的理论、基础和核心的技术、典型的特征和应用领域以及与面向对象编程的比较。
本书既广泛介绍函数式编程的思想,也结合JavaScript的特点分析其应用和局限,注重从本质和内在逻辑的角度解释各个主题,并辅以相关的代码演示,使读者不仅知其然,更知其所以然。对于函数式编程涉及到的JavaScript语言本身的特性,以及与面向对象编程的比较,本书也做了重点讨论。本书适合希望学习函数式编程的JavaScript程序员阅读,对一般的函数式编程理念感兴趣的读者也可以作为参考。
目录
内容提要 5
前言 5
第1章 名称 6
1.1 名称绑定 6
1.1.1 常量和变量 7
1.2 作用域 8
1.2.1 包块作用域与就近声明 9
1.2.2 静态作用域和动态作用域 11
1.2.3 前向引用和提升 13
1.3 闭包 14
1.3.1 包块作用域与闭包 16
1.4 小结 17
第2章 类型系统 17
2.1 类型是什么 17
2.2 常用的数据类型 18
2.2.1 整数 19
2.2.2 浮点数 19
2.2.3 布尔值 19
2.2.4 字符 19
2.2.5 元组、结构体、类 19
2.2.6 函数 20
2.2.7 数组、字符串、队列、堆栈、列表 21
2.2.8 结构体、映射 23
2.2.9 深入复合类型 24
2.3 强类型与弱类型 25
2.4 名义类型和结构类型 26
2.5 静态类型与动态类型 27
2.5.1 静态类型 27
2.5.2 动态类型 29
2.6 多态性 31
2.6.1 子类型多态性 32
2.6.2 参数多态性 34
2.7 JavaScript的类型系统 36
2.7.1 undefined和null 37
2.7.2 弱类型 40
2.7.3 变成强类型 43
2.8 鸭子类型和多态性 46
2.9 小结 47
第3章 Lambda演算和函数 48
3.1 命令式编程中函数的作用 48
3.1.1 抽象级别 49
3.2 Lambda演算 50
3.2.1 定义 51
3.2.2 记法 51
3.2.3 化约 51
3.2.4 算数 52
3.2.5 逻辑运算 53
3.2.6 函数式编程的特点 54
3.3 JavaScript中的函数 55
3.3.1 定义函数 56
3.3.2 调用函数 61
3.3.3 传递参数 61
3.3.4 模块 63
3.5 小结 64
第4章 函数是一等值 64
4.1 函数参数 65
4.1.1 数组的迭代方法 65
4.1.2 设计函数参数 66
4.2 函数返回值 69
4.2.1 判断数据类型 69
4.2.2 日志 70
4.2.3 读取对象属性 71
4.3 高阶函数 72
4.3.1 组合谓词函数 73
4.3.2 改变函数参数数目 74
4.3.3 检查参数类型 76
4.3.4 记忆化 78
4.4 小结 81
第5章 部分应用和复合 81
5.1 部分应用 81
5.2 柯里化 83
5.2.1 增强的柯里化 86
5.2.2 从右向左柯里化 87
5.2.3 进一步增强的柯里化 88
5.2.4 柯里化的性能成本 90
5.2.5 应用柯里化的方式 91
5.2.6 参数的顺序 92
5.2.7 柯里化与高阶函数 93
5.3 复合 95
5.3.1 管道和数据流 97
5.3.2 函数类型与柯里化 99
5.4 一切都是函数 101
5.4.1 操作符的函数化 101
5.4.2 方法的函数化 105
5.4.3 控制流语句的函数化 109
5.5 性能和可读性 112
5.6 小结 113
第6章 副作用和不变性 113
6.1 副作用 113
6.2 纯函数 114
6.2.1 外部变量 115
6.2.2 实现 117
6.2.3 函数内部的副作用 117
6.2.4 闭包 119
6.3 不变性 120
6.3.1 哲学上的不变性与身份 120
6.3.2 简单类型和复合类型 121
6.3.3 值类型和引用类型 122
6.3.4 可变类型和不可变类型 123
6.3.5 可变数据类型的坏处 123
6.3.6 克隆和冻结 125
6.3.7 不可变的数据结构 128
6.3.8 不可变的映射和数组 131
6.3.9 不可变类型的其他好处 134
6.4 小结 135
第7章 递归 136
7.1 调用自身 136
7.1.1 递归的思路 138
7.1.2 带累积参数的递归函数 139
7.2 递归的数据结构 142
7.2.1 构建列表 142
7.2.2 树 145
7.3 递归与迭代 146
7.3.1 名称 146
7.3.2 理念和对比 146
7.3.3 迭代协议 148
7.3.4 递归协议 150
7.3.5 搜索树 152
7.4 尾部递归 154
7.4.1 调用堆栈 154
7.4.2 尾部调用优化 156
7.4.3 怎样算是尾部调用 157
7.4.4 尾部递归 159
7.5 递归的效率 160
7.6 小结 163
第8章 列表 164
8.1 处理列表 164
8.1.1 函数的三种写法 165
8.1.2 处理列表的高阶函数 166
8.2 函数式编程的列表接口 169
8.2.1 没有副作用的方法 170
8.2.2 有副作用的方法 171
8.2.3 列表接口中的其他函数 173
8.3 小结 175
第9章 从面向对象到函数式编程 175
9.1 面向对象编程的特点 175
9.1.1 封装性 176
9.1.2 继承性 176
9.1.3 多态性 177
9.2 JavaScript面向对象编程 180
9.2.1 创建和修改单个对象 180
9.2.2 克隆和复制属性 181
9.2.3 原型 182
9.2.4 建构函数 182
9.2.5 建构函数和类型继承 184
9.2.6 原型和类型继承 186
9.2.7 Proxy和对象继承 189
9.2.8 Mixin 191
9.2.9 工厂函数 193
9.3 函数式编程的视角 196
9.3.1 不可变的对象 196
9.3.2 评判面向对象编程 197
9.4 方法链和复合函数 199
9.4.1 方法链 199
9.4.2 延迟的方法链 202
9.4.3 复合函数 203
9.4.3 函数式的SQL 203
9.5 小结 207
前言 5
第1章 名称 6
1.1 名称绑定 6
1.1.1 常量和变量 7
1.2 作用域 8
1.2.1 包块作用域与就近声明 9
1.2.2 静态作用域和动态作用域 11
1.2.3 前向引用和提升 13
1.3 闭包 14
1.3.1 包块作用域与闭包 16
1.4 小结 17
第2章 类型系统 17
2.1 类型是什么 17
2.2 常用的数据类型 18
2.2.1 整数 19
2.2.2 浮点数 19
2.2.3 布尔值 19
2.2.4 字符 19
2.2.5 元组、结构体、类 19
2.2.6 函数 20
2.2.7 数组、字符串、队列、堆栈、列表 21
2.2.8 结构体、映射 23
2.2.9 深入复合类型 24
2.3 强类型与弱类型 25
2.4 名义类型和结构类型 26
2.5 静态类型与动态类型 27
2.5.1 静态类型 27
2.5.2 动态类型 29
2.6 多态性 31
2.6.1 子类型多态性 32
2.6.2 参数多态性 34
2.7 JavaScript的类型系统 36
2.7.1 undefined和null 37
2.7.2 弱类型 40
2.7.3 变成强类型 43
2.8 鸭子类型和多态性 46
2.9 小结 47
第3章 Lambda演算和函数 48
3.1 命令式编程中函数的作用 48
3.1.1 抽象级别 49
3.2 Lambda演算 50
3.2.1 定义 51
3.2.2 记法 51
3.2.3 化约 51
3.2.4 算数 52
3.2.5 逻辑运算 53
3.2.6 函数式编程的特点 54
3.3 JavaScript中的函数 55
3.3.1 定义函数 56
3.3.2 调用函数 61
3.3.3 传递参数 61
3.3.4 模块 63
3.5 小结 64
第4章 函数是一等值 64
4.1 函数参数 65
4.1.1 数组的迭代方法 65
4.1.2 设计函数参数 66
4.2 函数返回值 69
4.2.1 判断数据类型 69
4.2.2 日志 70
4.2.3 读取对象属性 71
4.3 高阶函数 72
4.3.1 组合谓词函数 73
4.3.2 改变函数参数数目 74
4.3.3 检查参数类型 76
4.3.4 记忆化 78
4.4 小结 81
第5章 部分应用和复合 81
5.1 部分应用 81
5.2 柯里化 83
5.2.1 增强的柯里化 86
5.2.2 从右向左柯里化 87
5.2.3 进一步增强的柯里化 88
5.2.4 柯里化的性能成本 90
5.2.5 应用柯里化的方式 91
5.2.6 参数的顺序 92
5.2.7 柯里化与高阶函数 93
5.3 复合 95
5.3.1 管道和数据流 97
5.3.2 函数类型与柯里化 99
5.4 一切都是函数 101
5.4.1 操作符的函数化 101
5.4.2 方法的函数化 105
5.4.3 控制流语句的函数化 109
5.5 性能和可读性 112
5.6 小结 113
第6章 副作用和不变性 113
6.1 副作用 113
6.2 纯函数 114
6.2.1 外部变量 115
6.2.2 实现 117
6.2.3 函数内部的副作用 117
6.2.4 闭包 119
6.3 不变性 120
6.3.1 哲学上的不变性与身份 120
6.3.2 简单类型和复合类型 121
6.3.3 值类型和引用类型 122
6.3.4 可变类型和不可变类型 123
6.3.5 可变数据类型的坏处 123
6.3.6 克隆和冻结 125
6.3.7 不可变的数据结构 128
6.3.8 不可变的映射和数组 131
6.3.9 不可变类型的其他好处 134
6.4 小结 135
第7章 递归 136
7.1 调用自身 136
7.1.1 递归的思路 138
7.1.2 带累积参数的递归函数 139
7.2 递归的数据结构 142
7.2.1 构建列表 142
7.2.2 树 145
7.3 递归与迭代 146
7.3.1 名称 146
7.3.2 理念和对比 146
7.3.3 迭代协议 148
7.3.4 递归协议 150
7.3.5 搜索树 152
7.4 尾部递归 154
7.4.1 调用堆栈 154
7.4.2 尾部调用优化 156
7.4.3 怎样算是尾部调用 157
7.4.4 尾部递归 159
7.5 递归的效率 160
7.6 小结 163
第8章 列表 164
8.1 处理列表 164
8.1.1 函数的三种写法 165
8.1.2 处理列表的高阶函数 166
8.2 函数式编程的列表接口 169
8.2.1 没有副作用的方法 170
8.2.2 有副作用的方法 171
8.2.3 列表接口中的其他函数 173
8.3 小结 175
第9章 从面向对象到函数式编程 175
9.1 面向对象编程的特点 175
9.1.1 封装性 176
9.1.2 继承性 176
9.1.3 多态性 177
9.2 JavaScript面向对象编程 180
9.2.1 创建和修改单个对象 180
9.2.2 克隆和复制属性 181
9.2.3 原型 182
9.2.4 建构函数 182
9.2.5 建构函数和类型继承 184
9.2.6 原型和类型继承 186
9.2.7 Proxy和对象继承 189
9.2.8 Mixin 191
9.2.9 工厂函数 193
9.3 函数式编程的视角 196
9.3.1 不可变的对象 196
9.3.2 评判面向对象编程 197
9.4 方法链和复合函数 199
9.4.1 方法链 199
9.4.2 延迟的方法链 202
9.4.3 复合函数 203
9.4.3 函数式的SQL 203
9.5 小结 207