《JavaScript函数式编程思想》
Posted starrow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《JavaScript函数式编程思想》相关的知识,希望对你有一定的参考价值。
自序
伴随着Web技术的普及,javascript已成为应用最广泛的编程语言之一。由于其在Web前端编程中的统治地位、语言本身的表现力、灵活性、开源的本质和ECMAScript标准近年来的快速发展,JavaScript向各个领域渗透的势头仍然强劲。函数式编程的思想和语言原来仅仅在计算机学术圈中流行,近年来它的魅力越来越多地被主流软件开发行业认识到,Scala、Closure等语言的出现,C#、Java等语言中引入函数式编程的功能都是这一趋势的体现。
传统的JavaScript开发主要使用命令式和面向对象的编程范式,并零星地结合了一些函数式编程的技巧。通过系统地介绍函数式编程的思想和技术,展现它在提高代码的表现力、可读性和可维护性等方面的益处,本书希望能让更多的JavaScript程序员了解并喜欢上这种优美而高效的编程范式。
全书共分9章。第1、2章介绍了与JavaScript函数式编程所用技术紧密关联的名称和类型系统的理论;第3章简要介绍了函数式编程的理论基础lambda演算和JavaScript中函数的相关知识;第4、5章介绍了函数式编程的基础和核心技术:一等值的函数、部分应用和复合;第6章介绍了函数式编程的典型特征:没有副作用的纯函数和不可变的数据;第7章介绍了函数式编程中进行重复计算的递归模式;第8章介绍了函数式编程的重要领域:列表处理;第9章系统地比较了面向对象编程和函数式编程。
野人献曝,未免贻笑大方;愚者千虑,或有一得可鉴。书中的不足之处,欢迎读者批评指正。
目录
内容提要
前言
第1章 名称
1.1 名称绑定
1.1.1 常量和变量
1.2 作用域
1.2.1 包块作用域与就近声明
1.2.2 静态作用域和动态作用域
1.2.3 前向引用和提升
1.3 闭包
1.3.1 包块作用域与闭包
1.4 小结
第2章 类型系统
2.1 类型是什么
2.2 常用的数据类型
2.2.1 整数
2.2.2 浮点数
2.2.3 布尔值
2.2.4 字符
2.2.5 元组、结构体、类
2.2.6 函数
2.2.7 数组、字符串、队列、堆栈、列表
2.2.8 结构体、映射
2.2.9 深入复合类型
2.3 强类型与弱类型
2.4 名义类型和结构类型
2.5 静态类型与动态类型
2.5.1 静态类型
2.5.2 动态类型
2.6 多态性
2.6.1 子类型多态性
2.6.2 参数多态性
2.7 JavaScript的类型系统
2.7.1 undefined和null
2.7.2 弱类型
2.7.3 变成强类型
2.8 鸭子类型和多态性
2.9 小结
第3章 Lambda演算和函数
3.1 命令式编程中函数的作用
3.1.1 抽象级别
3.2 Lambda演算
3.2.1 定义
3.2.2 记法
3.2.3 化约
3.2.4 算数
3.2.5 逻辑运算
3.2.6 函数式编程的特点
3.3 JavaScript中的函数
3.3.1 定义函数
3.3.2 调用函数
3.3.3 传递参数
3.3.4 模块
3.5 小结
第4章 函数是一等值
4.1 函数参数
4.1.1 数组的迭代方法
4.1.2 设计函数参数
4.2 函数返回值
4.2.1 判断数据类型
4.2.2 日志
4.2.3 读取对象属性
4.3 高阶函数
4.3.1 组合谓词函数
4.3.2 改变函数参数数目
4.3.3 检查参数类型
4.3.4 记忆化
4.4 小结
第5章 部分应用和复合
5.1 部分应用
5.2 柯里化
5.2.1 增强的柯里化
5.2.2 从右向左柯里化
5.2.3 进一步增强的柯里化
5.2.4 柯里化的性能成本
5.2.5 应用柯里化的方式
5.2.6 参数的顺序
5.2.7 柯里化与高阶函数
5.3 复合
5.3.1 管道和数据流
5.3.2 函数类型与柯里化
5.4 一切都是函数
5.4.1 操作符的函数化
5.4.2 方法的函数化
5.4.3 控制流语句的函数化
5.5 性能和可读性
5.6 小结
第6章 副作用和不变性
6.1 副作用
6.2 纯函数
6.2.1 外部变量
6.2.2 实现
6.2.3 函数内部的副作用
6.2.4 闭包
6.3 不变性
6.3.1 哲学上的不变性与身份
6.3.2 简单类型和复合类型
6.3.3 值类型和引用类型
6.3.4 可变类型和不可变类型
6.3.5 可变数据类型的坏处
6.3.6 克隆和冻结
6.3.7 不可变的数据结构
6.3.8 不可变的映射和数组
6.3.9 不可变类型的其他好处
6.4 小结
第7章 递归
7.1 调用自身
7.1.1 递归的思路
7.1.2 带累积参数的递归函数
7.2 递归的数据结构
7.2.1 构建列表
7.2.2 树
7.3 递归与迭代
7.3.1 名称
7.3.2 理念和对比
7.3.3 迭代协议
7.3.4 递归协议
7.3.5 搜索树
7.4 尾部递归
7.4.1 调用堆栈
7.4.2 尾部调用优化
7.4.3 怎样算是尾部调用
7.4.4 尾部递归
7.5 递归的效率
7.6 小结
第8章 列表
8.1 处理列表
8.1.1 函数的三种写法
8.1.2 处理列表的高阶函数
8.2 函数式编程的列表接口
8.2.1 没有副作用的方法
8.2.2 有副作用的方法
8.2.3 列表接口中的其他函数
8.3 小结
第9章 从面向对象到函数式编程
9.1 面向对象编程的特点
9.1.1 封装性
9.1.2 继承性
9.1.3 多态性
9.2 JavaScript面向对象编程
9.2.1 创建和修改单个对象
9.2.2 克隆和复制属性
9.2.3 原型
9.2.4 建构函数
9.2.5 建构函数和类型继承
9.2.6 原型和类型继承
9.2.7 Proxy和对象继承
9.2.8 Mixin
9.2.9 工厂函数
9.3 函数式编程的视角
9.3.1 不可变的对象
9.3.2 评判面向对象编程
9.4 方法链和复合函数
9.4.1 方法链
9.4.2 延迟的方法链
9.4.3 复合函数
9.4.3 函数式的SQL
9.5 小结
更多内容
欢迎各位朋友本人及男朋友女朋友老公老婆儿子女儿中对JavaScript和函数式编程感兴趣的阅读。每次购买50斤以上(含)者赠作者签名照一张:)
以上是关于《JavaScript函数式编程思想》的主要内容,如果未能解决你的问题,请参考以下文章