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推荐书目
TCP/IP详解卷2实现 内容简介 本书完整而详细地介绍了TCP/IP协议是如何实现的。书中给出了约500个图例,15000行实际操作的C代码,采用举例教学的方...
WhatdoAmazonsproductreviews,eBaysfeedbackscoresystem,SlashdotsKarmaSystem,andXbo...
《数学战略家:谷超豪传》内容简介:《谷超豪传(数学战略家)》是《大家丛书》系列丛书之一。谷超豪,数学家。复旦大学教授,中国科
《虚拟智能体理论与技术》内容简介:本书结合国内外虚拟现实技术的发展潮流,结合作者以往的研究基础,论述了建立智能体的理论、方
《深入实践Spring Boot》内容简介:本书以丰富的实例,介绍了如何使用Spring Boot开发框架进行基础应用和分布式应用等方面的开发,
什麼是「互動建築」?如果建築像人體一樣,具有大腦、感覺神經、與自主動作反應,可以聰明地感受到人的需要,察覺周圍環境的變化
浪潮之巅:全2册 本书特色 《浪潮之巅(第3版)》不是一本科技产业发展历史集,而是在这个数字时代,一本it人非读不可,而非it人也应该拜读的作品。一个企业的发展...
作者简介:BoisyG.Pitre资深苹果开发专家,曾任Siri语音识别技术提供方Nuance公司Mac产品小组的资深软件工程师,参与开发了语音识
关东升国内知名iOS技术作家,iOS技术顾问,高级培训讲师,移动开发专家。精通iOS、Android和WindowsPhone及HTML5等移动开发技术。
本书注重实践而又深入理论,由浅入深且详细介绍了Spring2.0框架的几乎全部的内容,并重点突出2.0版本的新特性。本书将为读者展示
ORACLE11G宝典 本书特色 《Oracle 11g宝典》按照管理、应用、理解的需要,循序渐进地,完备地描述Oracle 11g的特征和功能,并在Oracl...
模糊目标跟踪理论与方法 本书特色 《模糊目标跟踪理论与方法》主要介绍模糊数学理论在目标跟踪中的应用。《模糊目标跟踪理论与方法》针对目标跟踪各个环节中出现的重点难...
《大势研判》内容简介:当前中国经济最大的宏观背景是增速换挡、结构调整和改革转型。本书试图采用“转型宏观”分析框架,打通长期
PPT设计完全自学教程 本书特色 本书是初学者快速自学powerpoint的经典教程。全书共分为24章,从powerpoint快速入门开始讲起,以循序渐进的方式...
在线阅读本书Inthisinterdisciplinarydiscussiononmentalmodels,researchersfromvariousarea...
《黄同学漫画中国:清末民初那些年2》内容简介:1916—1928·大国战火·群雄逐鹿·军阀割据·枭雄涌现·市井生活·工业文明·宫廷秘
《从“异域”到“旧疆”》内容简介:中国长期维持着大一统体制,是人类文明史上的独特现象,也是中国史研究的根本问题之一。本书考
《东京审判》内容简介:第二次世界大战结束后,从1946年5月3日至1948年11月12日,在日本东京进行了历时两年零六个月的“世纪大审判
《与大师同行》内容简介:经济思想的产生和发展,经历了一段漫长的历史。对于初学者来讲,穿越时间隧道的历程,充满着诸多的不确定
《炉边诗话》内容简介:本作品是作者写于上世纪80年代的一部解读古诗的集子,写在冬天,室内有一只取暖的炉子,故为此名。颇有于炉