JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。
全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量的作用域和闭包、高阶函数、由函数构建函数、递归、纯度和不变性以及更改政策、基于流的编程、类编程。除此之外,附录中还介绍了更多函数式JavaScript。
本书内容全面,示例丰富,适合想要了解函数式编程的JavaScript程序员和学习JavaScript的函数式程序员阅读。
第1章 JavaScript函数式编程简介1
1.1 JavaScript案例1
1.2 开始函数式编程4
1.2.1 为什么函数式编程很重要4
1.2.2 以函数为抽象单元7
1.2.3 封装和隐藏9
1.2.4 以函数为行为单位10
1.2.5 数据抽象14
1.2.6 函数式JavaScript初试17
1.2.7 加速19
1.3 Underscore示例22
1.4 总结23
第2章 一等函数与Applicative编程24
2.1 函数是一等公民24
2.2 Applicative编程30
2.2.1 集合中心编程31
2.2.2 Applicative编程的其他实例32
2.2.3 定义几个Applicative函数35
2.3 数据思考36
2.4 总结43
第3章 变量的作用域和闭包44
3.1 全局作用域44
3.2 词法作用域46
3.3 动态作用域47
3.4 函数作用域51
3.5 闭包52
3.5.1 模拟闭包53
3.5.2 使用闭包57
3.5.3 闭包的抽象59
3.6 总结60
第4章 高阶函数62
4.1 以其他函数为参数的函数62
4.1.1 关于传递函数的思考:max、finder和best63
4.1.2 关于传递函数的更多思考:重复、反复和条件迭代
(iterateUntil)65
4.2 返回其他函数的函数67
4.2.1 高阶函数捕获参数69
4.2.2 捕获变量的好处69
4.2.3 防止不存在的函数:fnull72
4.3 整合:对象校验器74
4.4 总结77
第5章 由函数构建函数78
5.1 函数式组合的精华78
5.2 柯里化(Currying)83
5.2.1 向右柯里化,还是向左84
5.2.2 自动柯里化参数85
5.2.3 柯里化流利的API88
5.2.4 JavaScript柯里化的缺点89
5.3 部分应用89
5.3.1 部分应用一个和两个已知的参数91
5.3.2 部分应用任意数量的参数92
5.3.3 局部应用实战:前置条件93
5.4 通过组合端至端的拼接函数96
5.5 总结98
第6章 递归100
6.1 自吸收(self—absorbed)函数(调用自己的函数)100
6.1.1 用递归遍历图105
6.1.2 深度优先自递归搜索106
6.1.3 递归和组合函数:Conjoin和Disjoin108
6.2 相互关联函数(函数调用其他会再调用回它的函数)110
6.2.1 使用递归深克隆111
6.2.2 遍历嵌套数组112
6.3 太多递归了114
6.3.1 生成器117
6.3.2 蹦床原理以及回调120
6.4 递归是一个底层操作121
6.5 总结122
第7章 纯度、不变性和更改政策123
7.1 纯度123
7.1.1 纯度和测试之间的关系124
7.1.2 提取纯函数125
7.1.3 测试不纯函数的属性126
7.1.4 纯度与引用透明度的关系127
7.1.5 纯度和幂等性129
7.2 不变性130
7.2.1 如果一棵树倒在树林里,有没有声音?132
7.2.2 不变性与递归133
7.2.3 冻结和克隆134
7.2.4 在函数级别上观察不变性136
7.2.5 观察对象的不变性137
7.2.6 对象往往是一个低级别的操作140
7.3 控制变化的政策141
7.4 总结144
第8章 基于流的编程145
8.1 链接145
8.1.1 惰性链148
8.1.2 Promises152
8.2 管道154
8.3 数据流与控制流158
8.3.1 找个一般的形状161
8.3.2 函数可以简化创建action164
8.4 总结166
第9章 无类编程167
9.1 数据导向167
9.2 Mixins173
9.2.1 修改核心原型175
9.2.2 类层次结构176
9.2.3 改变层级结构179
9.2.4 用Mixin扁平化层级结构180
9.2.5 通过Mixin扩展新的语义185
9.2.6 通过Mixin混合出新的类型187
9.2.7 方法是低级别操作188
9.3.call(“Finis”);190
附录A 更多函数式JavaScript191
A.1 JavaScript的函数式库191
A.1.1 函数式JavaScript191
A.1.2 Underscore—contrib192
A.1.3 RxJS192
A.1.4 Bilby194
A.1.5 allong.es195
A.1.6 其他函数式库196
A.2 能编译成JavaScript的函数式语言196
A.2.1 ClojureScript196
A.2.2 CoffeeScript197
A.2.3 Roy198
A.2.4 Elm198
附录B推荐书目
《形式感+》内容简介:网页设计师从早年的综合性工作中分化出来,形成了相对独立的专业岗位,网页设计也不再是单纯的软件应用,它衍
《CSSWeb站点设计手册》针对初、中级读者,特别是针对入门级读者。书中包含了经过精心筛选的学习CSS必须要了解和掌握的所有内容。
《一目了然Web软件显性设计之路》通过深入浅出地讲解与丰富的实际案例,帮助读者理解、掌握显性设计的精髓,可轻松熟练地设计出简
这本鼓舞人心的指南结合新鲜简洁的生活经验,用一两句话和看似简单的图表曲线,教你怎样才能活得更加丰富多彩。书中鼓励你小小地
《戊戌变法的另面:“张之洞档案”阅读笔记》内容简介:作者在“张之洞档案”的系统阅读中突出地感受到,这批史料给今人提供了观察
泉幸甫建筑师,日本大学生产工学系教授1947年熊本县出生,1973年日本大学研究生院硕士课程修了。1975~1977年R工作室。1977年设立
《太极拳延缓认知衰退研究:基于脑科学》内容简介:本书旨在揭示太极拳锻炼对改善老年人认知功能的影响及其作用机制。全书内容分三
《庄子人性论》内容简介:本书收入了《开放的心灵与审美的心境——〈庄子〉内篇的心学》《心通道境:心灵的内修与审美空间的外移—
Fullofwriting,reports,andrecommendations,TheMonocleGuidetoBetterlivingisoriginal...
视频动作识别研究 内容简介 人体动作识别具有非常广泛的应用,但是由于不同人在不同的场景下做同一类动作表现出的视觉差异非常大,所以动作识别研究具有非常大的挑战。《...
《书与钥匙的季节》内容简介:充满爱与友谊的6个相互关联的短篇日常推理故事集。两个每日沉溺在图书馆的男孩,一个敏锐踏实且为人温
《Excel财务数据合并与分析建模案例视频精讲》内容简介:对财务人员来说,每天都要面对大量的表格数据,做着重复的复制粘贴、公式引
《区块链与智慧物流》内容简介:本书以区块链技术与智慧物流的融合应用为核心,通过剖析智慧物流的发展演进及区块链影响物流系统与
图像特征提取与检索技术 本书特色 本书对基于内容的图像检索(content-based image retrieval,cbir)技术的基本原理、图像特征提取与...
《软件工程实践者的研究方法》(原书第6版)第6版在结构和内容上均有不少调整、更新和充实。第6版更加突出了软件过程,增加了敏捷开
《公司并购重组与整合》内容简介:并购作为公司金融的终极体现形式,是公司最重要的战略交易。并购重组能够从根本上改变一个公司,
《夏天最后一朵玫瑰》内容简介:本书是为初中至高中年龄的青少年精选的外国经典诗歌,均出自各国文学大师或大诗人之手,译者也是我
《包豪斯:大师和学生们》由弗兰克•惠特福德等所著,以时间为主线,通过在包豪斯学习和工作过的大师级人物的视角,精心梳理了包豪
Thisbookpresentsthefundamentalsofmolecularbiophysics,andhighlightstheconnectionb...
《Mentor高速电路板设计与仿真》以MentorEE2005SP3为基础,以具体电路为范例,详尽讲解元器件建库、原理图设计、布局、布线、仿真