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推荐书目
HarnessthepowerofJavaServerFacestocreateyourownserver-sideuserinterfacesfortheWe...
《R的极客理想——高级开发篇》内容简介:R的极客理想”系列图书以作者多年开发经验为素材,系统地梳理了R语言的知识。在《R的极客
在反人工智能者中,最为人所熟悉的就是休伯特--德雷福斯及其同在伯克利执教的工程学教授斯图亚特--德雷福斯。在本书中,休伯特--
《新手读财报》内容简介:本书作为财务分析的入门级读物,以“业”“财”融合为基调,充分强调财务源于业务,在理解公司业务的基础
Corporationshavefinallyrealizedthevalueofcollaborationtoolsforknowledgesharingan...
《国外计算机科学教材系列•Intel汇编语言程序设计(第5版)》全面细致地讲述了汇编语言程序设计的各个方面。从微处理器体系结构、工
电子商务网站建设与管理 本书特色 《电子商务网站建设与管理》特色:遵循“理论够用、注重应用”原则,把培养学生的动手能力与岗位实践能力放在首位,注重实际项目开发能...
《大数据技术入门(第2版)》内容简介:目前国内大数据市场继续保持高速的发展态势,作者在与地方政府、证券金融公司的项目合作中发
《20世纪的中国乡村》内容简介:本书从四个部分,系统呈现20世纪中国乡村社会发展状况。第一部分,探讨中国近代社会史研究的历程、
电商圈第一本自媒体著作《做自己——鬼脚七自媒体第一季》出版以来,深受广大读者喜爱。本书是鬼脚七的第二本书《爱生活——鬼脚
《解析深度学习:语音识别实践》内容简介:本书是首部介绍语音识别中深度学习技术细节的专著。全书首先概要介绍了传统语音识别理论
《短视频内容算法:如何在算法推荐时代引爆短视频》内容简介:算法推荐时代,内容创作方法论比任何时候都重要。一种与传统逻辑全然
《如何做质性研究》共分8大部分(主体是前5部分),次序大体上按照开展一项研究的时间顺序安排,并根据新手们在一个完整的质性研究
《头部主播养成计划:打造你的超级带货力》内容简介:如何定义电商和新零售?为什么直播卖货如此火爆?如何选择合适的直播带货平台
《游戏设计:深层设计思想与技巧》内容简介:本书是游戏设计行业的专业书籍,讲述游戏设计的方方面面,从基础的玩法和难度设计(包
HIGHLIGHTC++ConcurrencyinActionisthefirstbooktomarkettoshowhowtotakeadvantageoft...
Railsislarge,powerful,andnew.Howdoyouuseiteffectively?Howdoyouharnessthepower?An...
《Android Studio移动应用开发高级进阶》内容简介:本书是Android Studio移动应用开发系列教材的高级篇。本书在《Android Studi...
Forone-semestercoursesinIntroductoryBiologyfornon-majors.LifeonEarth,FifthEditio...
《科学的极致:漫谈人工智能》内容简介:集智俱乐部是一个从事学术研究、享受科学乐趣的探索者组成的团体,倡导以平等开放的态度、