upload/duxiu_main2/【星空藏书馆】/【星空藏书馆】等多个文件/图书馆8号/综合书库②/书籍漫画/精品 2018 2019最新IT编程电子书/第G1期(2019-03-05)/《JavaScript函数式编程思想》_潘俊_2019-01-01【瑞客论坛 www.ruike1.com】.pdf
JavaScript函数式编程思想 JavaScript han shu shi bian cheng si xiang 🔍
潘俊著
北京:人民邮电出版社, Di 1 ban, 北京 Beijing, 2019
中文 [zh] · PDF · 143.1MB · 2019 · 📘 非小说类图书 · 🚀/duxiu/lgli/upload/zlib · Save
描述
本书主要介绍了函数式编程的基础理论,核心技术,典型特征和应用领域,以及它与面向对象编程的比较.本书既广泛介绍函数式编程的思想,也结合JavaScript的特点分析其应用和局限,注重从本质和内在逻辑的角度解释各个主题,并辅以相关的代码演示.对于函数式编程涉及的JavaScript语言本身的特性,以及与面向对象编程的比较,在书中也给予了重点讨论.
备用文件名
lgli/潘俊 - JavaScript函数式编程思想 (2019, 人民邮电出版社).pdf
备用文件名
zlib/Computers/Web Development/潘俊/JavaScript函数式编程思想_16998794.pdf
备选作者
Adobe Acrobat 11.0.10
备用出版商
The People's Posts and Telecommunications Publishing House
备用出版商
人民邮电出版社 Ren min you dian chu ban she
备用版本
China, People's Republic, China
元数据中的注释
producers:
Adobe Acrobat Pro 11.0 Paper Capture Plug-in; modified using iText庐 5.5.10 漏2000-2015 iText Group NV (AGPL-version) (as-gbk-encoding)
Adobe Acrobat Pro 11.0 Paper Capture Plug-in; modified using iText庐 5.5.10 漏2000-2015 iText Group NV (AGPL-version) (as-gbk-encoding)
元数据中的注释
Bookmarks: p1 (p1): 第1章 名称
p1-1 (p1): 1.1名称绑定
p1-2 (p3): 1.2作用域
p1-2-1 (p5): 1.2.1包块作用域与就近声明
p1-2-2 (p7): 1.2.2静态作用域和动态作用域
p1-2-3 (p9): 1.2.3前向引用和提升
p1-3 (p10): 1.3闭包
p1-4 (p14): 1.4小结
p2 (p15): 第2章 类型系统
p2-1 (p15): 2.1类型是什么
p2-2 (p16): 2.2常用的数据类型
p2-2-1 (p16): 2.2.1整数
p2-2-2 (p16): 2.2.2浮点数
p2-2-3 (p17): 2.2.3布尔值
p2-2-4 (p17): 2.2.4字符
p2-2-5 (p17): 2.2.5元组、结构体、类
p2-2-6 (p19): 2.2.6函数
p2-2-7 (p20): 2.2.7数组、字符串、队列、堆栈、列表
p2-2-8 (p22): 2.2.8结构体、映射
p2-2-9 (p23): 2.2.9深入复合类型
p2-3 (p24): 2.3强类型与弱类型
p2-4 (p26): 2.4名义类型与结构类型
p2-5 (p27): 2.5静态类型与动态类型
p2-5-1 (p27): 2.5.1静态类型
p2-5-2 (p30): 2.5.2动态类型
p2-6 (p32): 2.6多态性
p2-6-1 (p33): 2.6.1子类型多态性
p2-6-2 (p35): 2.6.2参数多态性
p2-7 (p38): 2.7 JavaScript的类型系统
p2-7-1 (p39): 2.7.1 undefied和null
p2-7-2 (p43): 2.7.2弱类型
p2-7-3 (p47): 2.7.3变成强类型
p2-8 (p52): 2.8鸭子类型与多态性
p2-9 (p53): 2.9小结
p3 (p54): 第3章 lambda演算和函数
p3-1 (p54): 3.1命令式编程中函数的作用
p3-2 (p57): 3.2 lambda演算
p3-2-1 (p57): 3.2.1定义
p3-2-2 (p58): 3.2.2记法
p3-2-3 (p58): 3.2.3化约
p3-2-4 (p59): 3.2.4算数
p3-2-5 (p61): 3.2.5逻辑运算
p3-2-6 (p61): 3.2.6函数式编程的特点
p3-3 (p62): 3.3 JavaScript中的函数
p3-3-1 (p63): 3.3.1定义函数
p3-3-2 (p71): 3.3.2调用函数
p3-3-3 (p71): 3.3.3传递参数
p3-3-4 (p74): 3.3.4模块
p3-4 (p75): 3.4小结
p4 (p76): 第4章 函数是一等值
p4-1 (p76): 4.1函数参数
p4-1-1 (p77): 4.1.1数组的迭代方法
p4-1-2 (p78): 4.1.2设计函数参数
p4-2 (p81): 4.2函数返回值
p4-2-1 (p82): 4.2.1判断数据类型
p4-2-2 (p83): 4.2.2日志
p4-2-3 (p85): 4.2.3读取对象属性
p4-3 (p86): 4.3高阶函数
p4-3-1 (p87): 4.3.1组合谓词函数
p4-3-2 (p89): 4.3.2改变函数参数数目
p4-3-3 (p91): 4.3.3检查参数类型
p4-3-4 (p94): 4.3.4 记忆化
p4-4 (p98): 4.4小结
p5 (p100): 第5章 部分应用和复合
p5-1 (p100): 5.1部分应用
p5-2 (p103): 5.2柯里化
p5-2-1 (p106): 5.2.1增强的柯里化
p5-2-2 (p108): 5.2.2从右向左柯里化
p5-2-3 (p109): 5.2.3进一步增强的柯里化
p5-2-4 (p111): 5.2.4柯里化的性能成本
p5-2-5 (p113): 5.2.5应用柯里化的方式
p5-2-6 (p115): 5.2.6参数的顺序
p5-2-7 (p115): 5.2.7柯里化与高阶函数
p5-3 (p118): 5.3复合
p5-3-1 (p122): 5.3.1管道与数据流
p5-3-2 (p124): 5.3.2函数类型与柯里化
p5-4 (p126): 5.4一切都是函数
p5-4-1 (p127): 5.4.1操作符的函数化
p5-4-2 (p132): 5.4.2方法的函数化
p5-4-3 (p138): 5.4.3控制流语句的函数化
p5-5 (p141): 5.5性能与可读性
p5-6 (p142): 5.6小结
p6 (p144): 第6章 副作用和不变性
p6-1 (p144): 6.1副作用
p6-2 (p145): 6.2纯函数
p6-2-1 (p147): 6.2.1外部变量
p6-2-2 (p148): 6.2.2实现
p6-2-3 (p148): 6.2.3函数内部的副作用
p6-2-4 (p151): 6.2.4闭包
p6-3 (p152): 6.3不变性
p6-3-1 (p152): 6.3.1哲学上的不变性与身份
p6-3-2 (p153): 6.3.2简单类型与复合类型
p6-3-3 (p154): 6.3.3值类型与引用类型
p6-3-4 (p155): 6.3.4可变类型与不可变类型
p6-3-5 (p156): 6.3.5可变数据类型的不足之处
p6-3-6 (p158): 6.3.6克隆与冻结
p6-3-7 (p163): 6.3.7不可变的数据结构
p6-3-8 (p167): 6.3.8不可变的映射与数组
p6-3-9 (p170): 6.3.9不可变类型的其他好处
p6-4 (p171): 6.4小结
p7 (p172): 第7章 递归
p7-1 (p173): 7.1调用自身
p7-1-1 (p176): 7.1.1递归的思路
p7-1-2 (p177): 7.1.2带累积参数的递归函数
p7-2 (p180): 7.2递归的数据结构
p7-2-1 (p180): 7.2.1构建列表
p7-2-2 (p184): 7.2.2树
p7-3 (p186): 7.3递归与迭代
p7-3-1 (p186): 7.3.1名称
p7-3-2 (p186): 7.3.2理念与对比
p7-3-3 (p189): 7.3.3迭代协议
p7-3-4 (p192): 7.3.4递归协议
p7-3-5 (p195): 7.3.5搜索树
p7-4 (p198): 7.4尾部递归
p7-4-1 (p198): 7.4.1调用堆栈
p7-4-2 (p200): 7.4.2尾部调用优化
p7-4-3 (p201): 7.4.3怎样算是尾部调用
p7-4-4 (p204): 7.4.4尾部递归
p7-5 (p205): 7.5递归的效率
p7-6 (p209): 7.6小结
p8 (p211): 第8章 列表
p8-1 (p211): 8.1处理列表
p8-1-1 (p211): 8.1.1函数的三种写法
p8-1-2 (p213): 8.1.2处理列表的高阶函数
p8-2 (p218): 8.2函数式编程的列表接口
p8-2-1 (p219): 8.2.1没有副作用的方法
p8-2-2 (p220): 8.2.2有副作用的方法
p8-2-3 (p222): 8.2.3列表接口中的其他函数
p8-3 (p225): 8.3小结
p9 (p226): 第9章 从面向对象到函数式编程
p9-1 (p226): 9.1面向对象编程的特点
p9-1-1 (p227): 9.1.1封装性
p9-1-2 (p227): 9.1.2继承性
p9-1-3 (p228): 9.1.3多态性
p9-2 (p232): 9.2 JavaScript面向对象编程
p9-2-1 (p233): 9.2.1创建和修改单个对象
p9-2-2 (p234): 9.2.2克隆和复制属性
p9-2-3 (p234): 9.2.3原型
p9-2-4 (p235): 9.2.4建构函数
p9-2-5 (p237): 9.2.5建构函数与类型继承
p9-2-6 (p242): 9.2.6原型与类型继承
p9-2-7 (p245): 9.2.7 Proxy与对象继承
p9-2-8 (p248): 9.2.8 Mixin
p9-2-9 (p251): 9.2.9工厂函数
p9-3 (p255): 9.3函数式编程的视角
p9-3-1 (p256): 9.3.1不可变的对象
p9-3-2 (p257): 9.3.2评判面向对象编程
p9-4 (p260): 9.4方法链与复合函数
p9-4-1 (p260): 9.4.1方法链
p9-4-2 (p264): 9.4.2延迟的方法链
p9-4-3 (p265): 9.4.3复合函数
p9-4-4 (p266): 9.4.4函数式的SQL
p9-5 (p271): 9.5小结
p1-1 (p1): 1.1名称绑定
p1-2 (p3): 1.2作用域
p1-2-1 (p5): 1.2.1包块作用域与就近声明
p1-2-2 (p7): 1.2.2静态作用域和动态作用域
p1-2-3 (p9): 1.2.3前向引用和提升
p1-3 (p10): 1.3闭包
p1-4 (p14): 1.4小结
p2 (p15): 第2章 类型系统
p2-1 (p15): 2.1类型是什么
p2-2 (p16): 2.2常用的数据类型
p2-2-1 (p16): 2.2.1整数
p2-2-2 (p16): 2.2.2浮点数
p2-2-3 (p17): 2.2.3布尔值
p2-2-4 (p17): 2.2.4字符
p2-2-5 (p17): 2.2.5元组、结构体、类
p2-2-6 (p19): 2.2.6函数
p2-2-7 (p20): 2.2.7数组、字符串、队列、堆栈、列表
p2-2-8 (p22): 2.2.8结构体、映射
p2-2-9 (p23): 2.2.9深入复合类型
p2-3 (p24): 2.3强类型与弱类型
p2-4 (p26): 2.4名义类型与结构类型
p2-5 (p27): 2.5静态类型与动态类型
p2-5-1 (p27): 2.5.1静态类型
p2-5-2 (p30): 2.5.2动态类型
p2-6 (p32): 2.6多态性
p2-6-1 (p33): 2.6.1子类型多态性
p2-6-2 (p35): 2.6.2参数多态性
p2-7 (p38): 2.7 JavaScript的类型系统
p2-7-1 (p39): 2.7.1 undefied和null
p2-7-2 (p43): 2.7.2弱类型
p2-7-3 (p47): 2.7.3变成强类型
p2-8 (p52): 2.8鸭子类型与多态性
p2-9 (p53): 2.9小结
p3 (p54): 第3章 lambda演算和函数
p3-1 (p54): 3.1命令式编程中函数的作用
p3-2 (p57): 3.2 lambda演算
p3-2-1 (p57): 3.2.1定义
p3-2-2 (p58): 3.2.2记法
p3-2-3 (p58): 3.2.3化约
p3-2-4 (p59): 3.2.4算数
p3-2-5 (p61): 3.2.5逻辑运算
p3-2-6 (p61): 3.2.6函数式编程的特点
p3-3 (p62): 3.3 JavaScript中的函数
p3-3-1 (p63): 3.3.1定义函数
p3-3-2 (p71): 3.3.2调用函数
p3-3-3 (p71): 3.3.3传递参数
p3-3-4 (p74): 3.3.4模块
p3-4 (p75): 3.4小结
p4 (p76): 第4章 函数是一等值
p4-1 (p76): 4.1函数参数
p4-1-1 (p77): 4.1.1数组的迭代方法
p4-1-2 (p78): 4.1.2设计函数参数
p4-2 (p81): 4.2函数返回值
p4-2-1 (p82): 4.2.1判断数据类型
p4-2-2 (p83): 4.2.2日志
p4-2-3 (p85): 4.2.3读取对象属性
p4-3 (p86): 4.3高阶函数
p4-3-1 (p87): 4.3.1组合谓词函数
p4-3-2 (p89): 4.3.2改变函数参数数目
p4-3-3 (p91): 4.3.3检查参数类型
p4-3-4 (p94): 4.3.4 记忆化
p4-4 (p98): 4.4小结
p5 (p100): 第5章 部分应用和复合
p5-1 (p100): 5.1部分应用
p5-2 (p103): 5.2柯里化
p5-2-1 (p106): 5.2.1增强的柯里化
p5-2-2 (p108): 5.2.2从右向左柯里化
p5-2-3 (p109): 5.2.3进一步增强的柯里化
p5-2-4 (p111): 5.2.4柯里化的性能成本
p5-2-5 (p113): 5.2.5应用柯里化的方式
p5-2-6 (p115): 5.2.6参数的顺序
p5-2-7 (p115): 5.2.7柯里化与高阶函数
p5-3 (p118): 5.3复合
p5-3-1 (p122): 5.3.1管道与数据流
p5-3-2 (p124): 5.3.2函数类型与柯里化
p5-4 (p126): 5.4一切都是函数
p5-4-1 (p127): 5.4.1操作符的函数化
p5-4-2 (p132): 5.4.2方法的函数化
p5-4-3 (p138): 5.4.3控制流语句的函数化
p5-5 (p141): 5.5性能与可读性
p5-6 (p142): 5.6小结
p6 (p144): 第6章 副作用和不变性
p6-1 (p144): 6.1副作用
p6-2 (p145): 6.2纯函数
p6-2-1 (p147): 6.2.1外部变量
p6-2-2 (p148): 6.2.2实现
p6-2-3 (p148): 6.2.3函数内部的副作用
p6-2-4 (p151): 6.2.4闭包
p6-3 (p152): 6.3不变性
p6-3-1 (p152): 6.3.1哲学上的不变性与身份
p6-3-2 (p153): 6.3.2简单类型与复合类型
p6-3-3 (p154): 6.3.3值类型与引用类型
p6-3-4 (p155): 6.3.4可变类型与不可变类型
p6-3-5 (p156): 6.3.5可变数据类型的不足之处
p6-3-6 (p158): 6.3.6克隆与冻结
p6-3-7 (p163): 6.3.7不可变的数据结构
p6-3-8 (p167): 6.3.8不可变的映射与数组
p6-3-9 (p170): 6.3.9不可变类型的其他好处
p6-4 (p171): 6.4小结
p7 (p172): 第7章 递归
p7-1 (p173): 7.1调用自身
p7-1-1 (p176): 7.1.1递归的思路
p7-1-2 (p177): 7.1.2带累积参数的递归函数
p7-2 (p180): 7.2递归的数据结构
p7-2-1 (p180): 7.2.1构建列表
p7-2-2 (p184): 7.2.2树
p7-3 (p186): 7.3递归与迭代
p7-3-1 (p186): 7.3.1名称
p7-3-2 (p186): 7.3.2理念与对比
p7-3-3 (p189): 7.3.3迭代协议
p7-3-4 (p192): 7.3.4递归协议
p7-3-5 (p195): 7.3.5搜索树
p7-4 (p198): 7.4尾部递归
p7-4-1 (p198): 7.4.1调用堆栈
p7-4-2 (p200): 7.4.2尾部调用优化
p7-4-3 (p201): 7.4.3怎样算是尾部调用
p7-4-4 (p204): 7.4.4尾部递归
p7-5 (p205): 7.5递归的效率
p7-6 (p209): 7.6小结
p8 (p211): 第8章 列表
p8-1 (p211): 8.1处理列表
p8-1-1 (p211): 8.1.1函数的三种写法
p8-1-2 (p213): 8.1.2处理列表的高阶函数
p8-2 (p218): 8.2函数式编程的列表接口
p8-2-1 (p219): 8.2.1没有副作用的方法
p8-2-2 (p220): 8.2.2有副作用的方法
p8-2-3 (p222): 8.2.3列表接口中的其他函数
p8-3 (p225): 8.3小结
p9 (p226): 第9章 从面向对象到函数式编程
p9-1 (p226): 9.1面向对象编程的特点
p9-1-1 (p227): 9.1.1封装性
p9-1-2 (p227): 9.1.2继承性
p9-1-3 (p228): 9.1.3多态性
p9-2 (p232): 9.2 JavaScript面向对象编程
p9-2-1 (p233): 9.2.1创建和修改单个对象
p9-2-2 (p234): 9.2.2克隆和复制属性
p9-2-3 (p234): 9.2.3原型
p9-2-4 (p235): 9.2.4建构函数
p9-2-5 (p237): 9.2.5建构函数与类型继承
p9-2-6 (p242): 9.2.6原型与类型继承
p9-2-7 (p245): 9.2.7 Proxy与对象继承
p9-2-8 (p248): 9.2.8 Mixin
p9-2-9 (p251): 9.2.9工厂函数
p9-3 (p255): 9.3函数式编程的视角
p9-3-1 (p256): 9.3.1不可变的对象
p9-3-2 (p257): 9.3.2评判面向对象编程
p9-4 (p260): 9.4方法链与复合函数
p9-4-1 (p260): 9.4.1方法链
p9-4-2 (p264): 9.4.2延迟的方法链
p9-4-3 (p265): 9.4.3复合函数
p9-4-4 (p266): 9.4.4函数式的SQL
p9-5 (p271): 9.5小结
备用描述
第 1章 名称 5
1.1 名称绑定 5
1.2 作用域 7
1.2.1 包块作用域与就近声明 9
1.2.2 静态作用域和动态作用域 11
1.2.3 前向引用和提升 13
1.3 闭包 14
1.4 小结 18
第 2章 类型系统 19
2.1 类型是什么 19
2.2 常用的数据类型 20
2.2.1 整数 20
2.2.2 浮点数 20
2.2.3 布尔值 21
2.2.4 字符 21
2.2.5 元组、结构体、类 21
2.2.6 函数 23
2.2.7 数组、字符串、队列、堆栈、列表 24
2.2.8 结构体、映射 26
2.2.9 深入复合类型 27
2.3 强类型与弱类型 28
2.4 名义类型与结构类型 30
2.5 静态类型与动态类型 31
2.5.1 静态类型 31
2.5.2 动态类型 34
2.6 多态性 36
2.6.1 子类型多态性 37
2.6.2 参数多态性 39
2.7 JavaScript的类型系统 42
2.7.1 undefined和null 43
2.7.2 弱类型 47
2.7.3 变成强类型 51
2.8 鸭子类型与多态性 56
2.9 小结 57
第3章 lambda演算和函数 58
3.1 命令式编程中函数的作用 58
3.2 lambda演算 61
3.2.1 定义 61
3.2.2 记法 62
3.2.3 化约 62
3.2.4 算数 63
3.2.5 逻辑运算 65
3.2.6 函数式编程的特点 65
3.3 JavaScript中的函数 66
3.3.1 定义函数 67
3.3.2 调用函数 75
3.3.3 传递参数 75
3.3.4 模块 78
3.4 小结 79
第4章 函数是一等值 80
4.1 函数参数 80
4.1.1 数组的迭代方法 81
4.1.2 设计函数参数 82
4.2 函数返回值 85
4.2.1 判断数据类型 86
4.2.2 日志 87
4.2.3 读取对象属性 89
4.3 高阶函数 90
4.3.1 组合谓词函数 91
4.3.2 改变函数参数数目 93
4.3.3 检查参数类型 95
4.3.4 记忆化 98
4.4 小结 102
第5章 部分应用和复合 104
5.1 部分应用 104
5.2 柯里化 107
5.2.1 增强的柯里化 110
5.2.2 从右向左柯里化 112
5.2.3 进一步增强的柯里化 113
5.2.4 柯里化的性能成本 115
5.2.5 应用柯里化的方式 117
5.2.6 参数的顺序 119
5.2.7 柯里化与高阶函数 119
5.3 复合 122
5.3.1 管道与数据流 126
5.3.2 函数类型与柯里化 128
5.4 一切都是函数 130
5.4.1 操作符的函数化 131
5.4.2 方法的函数化 136
5.4.3 控制流语句的函数化 142
5.5 性能与可读性 145
5.6 小结 146
第6章 副作用和不变性 148
6.1 副作用 148
6.2 纯函数 149
6.2.1 外部变量 151
6.2.2 实现 152
6.2.3 函数内部的副作用 152
6.2.4 闭包 155
6.3 不变性 156
6.3.1 哲学上的不变性与身份 156
6.3.2 简单类型与复合类型 157
6.3.3 值类型与引用类型 158
6.3.4 可变类型与不可变类型 159
6.3.5 可变数据类型的不足之处 160
6.3.6 克隆与冻结 162
6.3.7 不可变的数据结构 167
6.3.8 不可变的映射与数组 171
6.3.9 不可变类型的其他好处 174
6.4 小结 175
第7章 递归 176
7.1 调用自身 177
7.1.1 递归的思路 180
7.1.2 带累积参数的递归函数 181
7.2 递归的数据结构 184
7.2.1 构建列表 184
7.2.2 树 188
7.3 递归与迭代 190
7.3.1 名称 190
7.3.2 理念与对比 190
7.3.3 迭代协议 193
7.3.4 递归协议 196
7.3.5 搜索树 199
7.4 尾部递归 202
7.4.1 调用堆栈 202
7.4.2 尾部调用优化 204
7.4.3 怎样算是尾部调用 205
7.4.4 尾部递归 208
7.5 递归的效率 209
7.6 小结 213
第8章 列表 215
8.1 处理列表 215
8.1.1 函数的三种写法 215
8.1.2 处理列表的高阶函数 217
8.2 函数式编程的列表接口 222
8.2.1 没有副作用的方法 223
8.2.2 有副作用的方法 224
8.2.3 列表接口中的其他函数 226
8.3 小结 229
第9章 从面向对象到函数式编程 230
9.1 面向对象编程的特点 230
9.1.1 封装性 231
9.1.2 继承性 231
9.1.3 多态性 232
9.2 JavaScript面向对象编程 236
9.2.1 创建和修改单个对象 237
9.2.2 克隆和复制属性 238
9.2.3 原型 238
9.2.4 建构函数 239
9.2.5 建构函数与类型继承 241
9.2.6 原型与类型继承 246
9.2.7 Proxy与对象继承 249
9.2.8 Mixin 252
9.2.9 工厂函数 255
9.3 函数式编程的视角 259
9.3.1 不可变的对象 260
9.3.2 评判面向对象编程 261
9.4 方法链与复合函数 264
9.4.1 方法链 264
9.4.2 延迟的方法链 268
9.4.3 复合函数 269
9.4.4 函数式的SQL 270
9.5 小结 275
1.1 名称绑定 5
1.2 作用域 7
1.2.1 包块作用域与就近声明 9
1.2.2 静态作用域和动态作用域 11
1.2.3 前向引用和提升 13
1.3 闭包 14
1.4 小结 18
第 2章 类型系统 19
2.1 类型是什么 19
2.2 常用的数据类型 20
2.2.1 整数 20
2.2.2 浮点数 20
2.2.3 布尔值 21
2.2.4 字符 21
2.2.5 元组、结构体、类 21
2.2.6 函数 23
2.2.7 数组、字符串、队列、堆栈、列表 24
2.2.8 结构体、映射 26
2.2.9 深入复合类型 27
2.3 强类型与弱类型 28
2.4 名义类型与结构类型 30
2.5 静态类型与动态类型 31
2.5.1 静态类型 31
2.5.2 动态类型 34
2.6 多态性 36
2.6.1 子类型多态性 37
2.6.2 参数多态性 39
2.7 JavaScript的类型系统 42
2.7.1 undefined和null 43
2.7.2 弱类型 47
2.7.3 变成强类型 51
2.8 鸭子类型与多态性 56
2.9 小结 57
第3章 lambda演算和函数 58
3.1 命令式编程中函数的作用 58
3.2 lambda演算 61
3.2.1 定义 61
3.2.2 记法 62
3.2.3 化约 62
3.2.4 算数 63
3.2.5 逻辑运算 65
3.2.6 函数式编程的特点 65
3.3 JavaScript中的函数 66
3.3.1 定义函数 67
3.3.2 调用函数 75
3.3.3 传递参数 75
3.3.4 模块 78
3.4 小结 79
第4章 函数是一等值 80
4.1 函数参数 80
4.1.1 数组的迭代方法 81
4.1.2 设计函数参数 82
4.2 函数返回值 85
4.2.1 判断数据类型 86
4.2.2 日志 87
4.2.3 读取对象属性 89
4.3 高阶函数 90
4.3.1 组合谓词函数 91
4.3.2 改变函数参数数目 93
4.3.3 检查参数类型 95
4.3.4 记忆化 98
4.4 小结 102
第5章 部分应用和复合 104
5.1 部分应用 104
5.2 柯里化 107
5.2.1 增强的柯里化 110
5.2.2 从右向左柯里化 112
5.2.3 进一步增强的柯里化 113
5.2.4 柯里化的性能成本 115
5.2.5 应用柯里化的方式 117
5.2.6 参数的顺序 119
5.2.7 柯里化与高阶函数 119
5.3 复合 122
5.3.1 管道与数据流 126
5.3.2 函数类型与柯里化 128
5.4 一切都是函数 130
5.4.1 操作符的函数化 131
5.4.2 方法的函数化 136
5.4.3 控制流语句的函数化 142
5.5 性能与可读性 145
5.6 小结 146
第6章 副作用和不变性 148
6.1 副作用 148
6.2 纯函数 149
6.2.1 外部变量 151
6.2.2 实现 152
6.2.3 函数内部的副作用 152
6.2.4 闭包 155
6.3 不变性 156
6.3.1 哲学上的不变性与身份 156
6.3.2 简单类型与复合类型 157
6.3.3 值类型与引用类型 158
6.3.4 可变类型与不可变类型 159
6.3.5 可变数据类型的不足之处 160
6.3.6 克隆与冻结 162
6.3.7 不可变的数据结构 167
6.3.8 不可变的映射与数组 171
6.3.9 不可变类型的其他好处 174
6.4 小结 175
第7章 递归 176
7.1 调用自身 177
7.1.1 递归的思路 180
7.1.2 带累积参数的递归函数 181
7.2 递归的数据结构 184
7.2.1 构建列表 184
7.2.2 树 188
7.3 递归与迭代 190
7.3.1 名称 190
7.3.2 理念与对比 190
7.3.3 迭代协议 193
7.3.4 递归协议 196
7.3.5 搜索树 199
7.4 尾部递归 202
7.4.1 调用堆栈 202
7.4.2 尾部调用优化 204
7.4.3 怎样算是尾部调用 205
7.4.4 尾部递归 208
7.5 递归的效率 209
7.6 小结 213
第8章 列表 215
8.1 处理列表 215
8.1.1 函数的三种写法 215
8.1.2 处理列表的高阶函数 217
8.2 函数式编程的列表接口 222
8.2.1 没有副作用的方法 223
8.2.2 有副作用的方法 224
8.2.3 列表接口中的其他函数 226
8.3 小结 229
第9章 从面向对象到函数式编程 230
9.1 面向对象编程的特点 230
9.1.1 封装性 231
9.1.2 继承性 231
9.1.3 多态性 232
9.2 JavaScript面向对象编程 236
9.2.1 创建和修改单个对象 237
9.2.2 克隆和复制属性 238
9.2.3 原型 238
9.2.4 建构函数 239
9.2.5 建构函数与类型继承 241
9.2.6 原型与类型继承 246
9.2.7 Proxy与对象继承 249
9.2.8 Mixin 252
9.2.9 工厂函数 255
9.3 函数式编程的视角 259
9.3.1 不可变的对象 260
9.3.2 评判面向对象编程 261
9.4 方法链与复合函数 264
9.4.1 方法链 264
9.4.2 延迟的方法链 268
9.4.3 复合函数 269
9.4.4 函数式的SQL 270
9.5 小结 275
开源日期
2021-08-17
🚀 快速下载
成为会员以支持书籍、论文等的长期保存。为了感谢您对我们的支持,您将获得高速下载权益。❤️
如果您在本月捐款,您将获得双倍的快速下载次数。
🐢 低速下载
由可信的合作方提供。 更多信息请参见常见问题解答。 (可能需要验证浏览器——无限次下载!)
- 低速服务器(合作方提供) #1 (稍快但需要排队)
- 低速服务器(合作方提供) #2 (稍快但需要排队)
- 低速服务器(合作方提供) #3 (稍快但需要排队)
- 低速服务器(合作方提供) #4 (稍快但需要排队)
- 低速服务器(合作方提供) #5 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #6 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #7 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #8 (无需排队,但可能非常慢)
- 低速服务器(合作方提供) #9 (无需排队,但可能非常慢)
- 下载后: 在我们的查看器中打开
所有选项下载的文件都相同,应该可以安全使用。即使这样,从互联网下载文件时始终要小心。例如,确保您的设备更新及时。
外部下载
-
对于大文件,我们建议使用下载管理器以防止中断。
推荐的下载管理器:JDownloader -
您将需要一个电子书或 PDF 阅读器来打开文件,具体取决于文件格式。
推荐的电子书阅读器:Anna的档案在线查看器、ReadEra和Calibre -
使用在线工具进行格式转换。
推荐的转换工具:CloudConvert和PrintFriendly -
您可以将 PDF 和 EPUB 文件发送到您的 Kindle 或 Kobo 电子阅读器。
推荐的工具:亚马逊的“发送到 Kindle”和djazz 的“发送到 Kobo/Kindle” -
支持作者和图书馆
✍️ 如果您喜欢这个并且能够负担得起,请考虑购买原版,或直接支持作者。
📚 如果您当地的图书馆有这本书,请考虑在那里免费借阅。
下面的文字仅以英文继续。
总下载量:
“文件的MD5”是根据文件内容计算出的哈希值,并且基于该内容具有相当的唯一性。我们这里索引的所有影子图书馆都主要使用MD5来标识文件。
一个文件可能会出现在多个影子图书馆中。有关我们编译的各种数据集的信息,请参见数据集页面。
有关此文件的详细信息,请查看其JSON 文件。 Live/debug JSON version. Live/debug page.