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推荐书目
《快速成交》内容简介:对销售人员来说,无论是设计销售方案,还是进行客户筛选、客户拜访,都是为了一个共同的目的——成交。没有
数据结构-C++版-(第四版)-(英文影印版) 本书特色 《数据结构:C++版(第4版)(影印版)》以C++语言作为实现语言,利用面向对象的方法,从规格说明出发...
《大隋兴衰四十年4:自杀王朝》内容简介:隋炀帝霸道激进的作为,使得他的雄才大略变成了残暴不仁,千秋伟业变成了人间噩梦。鼎盛辉
《数码摄影后期高手之路》内容简介:本书是国内知名的图形图像专家——李涛多年在摄影后期教学实践的总结。他通过拍摄及后期操作前
《原画梦》内容简介:这是一本由浅入深的绘画教程,共6章,循序渐进地展开学习。学习内容包括基础教学、材质表现、概念设计、卡牌设
《孩子咳嗽,自然疗法80种》内容简介:运用自然疗法,调动孩子身体的自愈能力,不仅治咳嗽更养生咳嗽并不是疾病,而是疾病的一种症
《小小艺术大师·华夏版:与石涛探访桃花源》内容简介:石涛(1642—1708),本是明朝皇室子孙,却在改朝换代中被迫出家当了和尚。
《我坐在火山的最边缘》内容简介:本书收录了青年学者、诗人包慧怡2005—2015年间的代表诗作,是作者2016年出版的诗集的修订版,增
不可知的未来正向我们涌来,在IT技术变革比人们换手机还勤的时代里,一切更新都显得那么平常而频繁。这一切的策源地――硅谷,也
《自然辩证法新编(第2版)》是一本学术性著作,在多年探索的基础上写成。内容改革体现在两个方面:一是加深理论深度,对一些重要的
《链接:社交时代的品牌法则》内容简介:社交时代,个体崛起,个体成为经济的基本单元,链接个体成社群是商业的核心逻辑。本书作者
《超级谈话术》内容简介:有些问题,难以启齿,不好开口,但又事关你的利益,有些问题,一聊就“炸”,关系会僵,但你又不得不聊!
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python可以用于很多的领域,从科学计算到游戏开发。《Python编
《Android基础教程》内容完整丰富,具有较强的通用性,读者都能通过《Android基础教程》快速学习Android开发,提高相关技能。And
有人说Google让我们变得更笨,有人说Facebook出卖了我们的隐私,有人说Twitter将我们的注意力碎片化。在你担忧这些社会化媒体让我
作为享誉全球的设计大师,原研哉将日本的生活美学和设计理念带给了全球的读者,我们也许看到过大师精彩的设计作品以及以他的理念
开放式知识网络与高技术服务模式创新-构建体系.动态耦合及网络效应 本书特色 本书既为高技术开放式知识网络体竞争优势的完善、强化与发展提供有力的理论支撑与战略依据...
《云梯:从新人到达人的职场进化论》内容简介:本书从分析当今人们的学习、工作、生活现状开始,逐步引导读者更好地进行自我管理和
《成功养育:为孩子搭建良好的成长生态》内容简介:只有为孩子搭建良好的成长生态,才能培养出成功的、走得更远的孩子。那么,良好
《零基础学Oracle》内容简介:Oracle数据库是目前世界上使用最为广泛的数据库管理系统。本书不仅是一本Oracle的入门教材,也是初学