零、前言

函数式编程是一种强调并支持编写更智能的代码的风格,它最大限度地降低了复杂性并增加了模块化。这是一种通过巧妙的变异、组合和使用函数来编写更简洁代码的方法。JavaScript 为这种方法提供了一个极好的媒介。互联网的脚本语言 JavaScript 实际上本质上是一种函数式语言。通过学习如何公开它作为一种功能性语言的真实身份,我们可以实现功能强大、更容易维护和更可靠的 web 应用。通过这样做,JavaScript 奇怪的怪癖和陷阱会突然变得清晰,语言作为一个整体会变得更有意义。学习如何使用函数式编程将使你终生成为一名更好的程序员。

这本书是对学习函数式编程感兴趣的新的和有经验的 JavaScript 开发人员的指南。这本书的重点是函数式编程技术、风格的发展,以及关于 JavaScript 库的详细信息,它将帮助你编写更智能的代码,成为一名更好的程序员。

这本书涵盖了什么

第 1 章JavaScript 函数端的力量——一个演示,通过在传统方法和函数编程的帮助下创建一个小的网络应用,设定了这本书的节奏。然后比较这两种方法,强调函数式编程的重要性。

第二章函数式编程基础,向大家介绍函数式编程的核心概念以及内置的 JavaScript 函数。

第 3 章设置函数式编程环境,探索不同的 JavaScript 库以及如何针对函数式编程进行优化。

第 4 章在 JavaScript 中实现函数式编程技术,解释了 JavaScript 中的函数范式。它涵盖了函数式编程的几种风格,并演示了如何在不同的场景中使用它们。

第五章范畴论,详细讲解范畴论的概念,然后用 JavaScript 实现。

第 6 章JavaScript 中的高级主题和陷阱,重点介绍了用 JavaScript 编程时可能面临的各种弊端,以及成功应对这些弊端的各种方法。

第七章JavaScript 中的函数式和面向对象编程将函数式和面向对象编程都与 JavaScript 联系起来,向您展示了这两种范式如何互补并共存。

附录 AJavaScript 中函数编程的常用函数,包含 JavaScript 中用于执行函数编程的常用函数。

附录 B术语表,包括整本书使用的术语表。

这本书你需要什么

只需要一个浏览器就能让你启动并运行。

这本书是给谁的

如果你是一个对学习函数式编程感兴趣的 JavaScript 开发人员,正在寻找掌握 JavaScript 语言的飞跃,或者只是想成为一名更好的程序员,那么这本书非常适合你。本指南面向参与开发反应式前端应用、与可靠性和并发性争论不休的服务器端应用以及其他一切的程序员。

惯例

在这本书里,你会发现许多区分不同种类信息的文本样式。以下是这些风格的一些例子和对它们的意义的解释。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄如下所示:“我们可以通过使用include指令来包含其他上下文。”

代码块设置如下:

Function.prototype.partialApply = function() {
  var func = this;
  args = Array.prototype.slice.call(arguments);
  return function() {
    return func.apply(this, args.concat(
      Array.prototype.slice.call(arguments)
    ));
  };
};

当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:

var messages = ['Hi', 'Hello', 'Sup', 'Hey', 'Hola'];
messages.map(function(s,i){
  return printSomewhere(s, i*10, i*10);
}).forEach(document.body.appendChild);

新名词重要词语以粗体显示。您在屏幕上看到的单词,例如菜单或对话框中的单词,出现在文本中,如下所示:“单击下一步按钮,您将进入下一个屏幕。”

警告或重要提示会出现在这样的框中。

类型

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或不喜欢什么。读者反馈对我们来说很重要,因为它有助于我们开发出你真正能从中获益的标题。

要给我们发送一般反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并在您的邮件主题中提及书名。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参见我们位于www.packtpub.com/authors的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您在http://www.packtpub.com的账户下载您购买的所有 Packt Publishing 书籍的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

勘误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现了错误——可能是文本或代码中的错误——如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书籍,点击勘误表 提交 表格链接,并输入您的勘误表详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请前往https://www.packtpub.com/books/content/support并在搜索栏中输入图书名称。所需信息将出现在勘误表部分。

盗版

互联网上版权材料的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们的作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽最大努力解决问题。