标题：JavaScript语言精髓与编程实践（第2版）
出版信息
JavaScript语言精髓与编程实践（第2版）
周爱民 着  
ISBN 978-7-121-15640-3
2012年3月出版
定价：79元
16开
476页
以JavaScript视角看整个计算机语言的世界，小角度引来的大话题
内容简介
本书详细讲述JavaScript 作为一种混合式语言的各方面特性，包括过程式、面向对象、函数式和动态语言特性等，在动态函数式语言特性方面有着尤为细致的讲述。本书的主要努力之一，就是分解出这些语言原子，并重现将它们混合在一起的过程与方法。通过从复杂性到单一语言特性的还原过程，读者可了解到语言的本质，以及“层出不穷的语言特性”背后的真相。
本书主要的著述目的是基于一种形式上简单的语言来讲述“语言的本质及其应用”。本书详细讲述了通过框架执行过程来构造一个JavaScript 扩展框架的方法，并完整地讲述了框架扩展中各种设计取舍，因此可以作为研究计算机程序设计语言时的参考，用以展示现实系统如何实现经典理论中的各种编程范型。
作者简介
周爱民（Aimingoo），国内软件开发界资深软件工程师、架构师，技术作家。有十余年的软件开发、项目管理、团队建设的经验。著有《Delphi源代码分析》、《大道至简》和《JavaScript语言精髓与编程实践》等专著。
◆2001年，主持完成的“极光数据处理仓库中心系统”被河南省信息产业厅授予省高新技术产品二等奖。
◆2003年，被美国Borland公司授予 “Borland Delphi产品专家”称号。
◆2004年，出版《Delphi源代码分析》，被誉为“Delphi领域精品著作”。
◆2005年，发布《大道至简》电子版（第一版）。
◆2006年，发起开源项目QomolangmaOpenProiect，探讨语言系统基础技术。
◆2007年3月，出版《大道至简》（第二版）。
◆2008年3月，出版《JavaScript语言精髓与编程实践》第一版。
第 2 版 代序
要有光
《世界需要一种什么样的语言》节选
什么才是决定语言的未来的思想呢？或者我们也可以换个角度来提出这个问题：世界需要一种什么样的语言？
特性众多、适应性强，就是将来语言的特点吗？我们知道现在的C#与Java 都在这条道路上前进。与特定的系统相关，就是语言的出路吗？例如曾经的VC++，以及它面向不同平台的版本。当然，与此类似的语言，还有C，以及汇编语言等。
这些例举其实都是在特定环境下的特定语言，所不同的无非是此处的环境的大小。这其实也是程序员的心病：我们到底选Windows 平台，还是Java 平台，或者Linux 系统，再或者是……我们总是在不同的厂商及其支持的平台中选择，而最终这种选择又决定了我们所使用的语言。这与喜好无关，也与语言的好坏无关，不过是一种趋利的选择罢了。所以你在使用着的也许只是一种“并不那么‘好’”，以及并不能令你那么开心地编程的语言。你越发辛勤地工作，越发地为这些语言摇旗鼓噪，你也就离语言的真相越来越远。
当然，这不过是一种假设。但是，真相不都是从假设开始的吗？
语言有些很纯粹，有些则以混杂著称。如果编程世界只有一种语言，无论它何等复杂，也必因毫无比较而显得足够纯粹。所以只有在多种语言之间比较，才会有纯粹或混杂的差异：纯粹与混杂总是以一种或多种分类法为背景来描述的。
因此我们了解这些类属概念的标准、原则，也就回溯到了种种语言的本质：它是什么、怎么样，以及如何工作。这本书，将这些分类回溯到两种极端的对立：命令式与说明式、动态与静态。我讲述除了静态语言（一般是指类似C、C++、Delphi 等的强类型、静态、编译型语言）之外的其他三种类型。正是从根底里具有这三种类型的特性，所以JavaScript 具有令人相当困扰的混合语言特性。分离它们，并揭示将它们混沌一物的方法与过程，如历经涅槃。在这一经历中，这本书就是我的所得。
多年以来，我在我所看不见的黑暗与看得见的梦境中追寻着答案。这本书是我最终的结论，或者结论面前的最后一层表象：我们需要从纯化的语言中领悟到编程的本质，并以混杂的语言来创造我们的世界。我看到：局部的、纯化的语言可能带来独特的性质，而从全局来看，世界是因为混杂而变得有声有色。如果上帝不说“要有光”，那么我们将不能了解世象之表；而世象有了表面，便有了混杂的色彩，我们便看不见光之外的一切事物。我们依赖于光明，而事实是光明遮住了黑暗。如同你现在正在使用的那一种、两种或更多种语言，阻碍了你看到你的未来。
周爱民
2009 年1 月于本书精简版序
第 1 版 代序
学两种语言
《我的程序语言实践》节选
《程序设计语言——实践之路》一书对“语言”有一个分类法，将语言分类为“说明式”与“命令式”两种。Delphi 以及C、C++、Java、C#等都被分在“命令式”语言范型的范畴，“函数式”语言则是“说明式”范型中的一种。如今我回顾自己对语言的学习，其实十年也就学会了两种语言：一种是命令式的Pascal/Delphi，另一种则是说明式的JavaScript。当然，从语言的实现方式来看，一种是静态的，一种是动态的。
这便是我程序员生涯的全部了。
我毕竟不是计算机科学的研究者，而只是其应用的实践者，因此我从一开始就缺乏对“程序”的某些科学的或学术层面上的认识是很正常的。也许有些人一开始就认识到程序便是如此，或者一种语言就应当是这样构成和实现的，那么他可能是从计算机科学走向应用，故而比我了解得多些。而我，大概在十年前学习编程以及在后来很多年的实践中，仅被要求“写出代码”而从未被要求了解“什么是语言”。所以我才会后知后觉，才会在很长的时间里迷失于那些精细的、沟壑纵横的语言表面而不自知。然而一如我现在所见到的，与我曾相同地行进于那些沟壑的朋友，仍然在持续地迷惑着、盲目着，全然无觉于沟壑之外的瑰丽与宏伟。
前些天写过一篇博客，是推荐那篇“十年学会编程”的。那篇文章道出了我在十年编程实践之后，对程序语言的最深刻的感悟。我们学习语言其实不必太多，深入一两种就可以了。如果在一种类型的语言上翻来覆去，例如不断地学C、Delphi、Java、C#……无非是求生存、讨生活，或者用以装点个人简历，于编程能力的提高用处是不大的。更多的人，因为面临太多的语言选择而浅尝辄止，多年之后仍远离程序根本，成为书写代码的机器，把书写代码的行数、程序个数或编程年限作为简历中最显要的成果。这在明眼人看来，不过是熟练的砌砖工而已。
我在《大道至简》中说“如今我已经不再专注于语言”。其实在说完这句话之后，我就已经开始了对JavaScript 的深入研究。在如此深入地研究一种语言，进而与另一种全然有别的语言比较之后，我对“程序=算法+结构”有了更深刻的理解与认识。尽管这句名言从来未因我的认识而变化过，从来未因说明与命令的编程方式而变化过，也从来未因动态与静态的实现方法而变化过。
动静之间，不变的是本质。我之所以写这篇文章，并非想说明这种本质是什么抑或如何得到，只是期望读者能在匆忙的行走中，时而停下脚步，远远地观望一下目标罢了。而我此刻，正在做一个驻足观望的路人。
周爱民
2007 年11 月于个人博客
前 言
语言
语言是一种交流的工具，这约定了语言的“工具”本质，以及“交流”的功用。“工具”的选择只在于“功用”是否能达到，而不在于工具是什么。
在数千年之前，远古祭师手中的神杖就是他们与神交流的工具。祭师让世人相信他们敬畏的是神，而世人只需要相信那柄神杖。于是，假如祭师不小心丢掉了神杖，就可以堂而皇之地再做一根。甚至，他们可以随时将旧的换成更新或更旧的神杖，只要他们宣称这是一根更有利于通神的杖。对此，世人往往做出迷惑的表情，或者呈现欢欣鼓舞的情状。今天，这种表情或情状一样地出现在大多数程序员的脸上，出现在他们听闻到新计算机语言被创生的时刻。
神杖换了，祭师还是祭师，世人还是会把头叩得山响。祭师掌握了与神交流的方法（如果真如同他们自己说的那样），而世人只看见了神杖。
所以，泛义的工具是文明的基础，而确指的工具却是愚人的器物。
计算机语言有很多种分类方法，例如高级语言或者低级语言。其中一种分类方法，就是将计算机语言分为“静态语言”和“动态语言”——事物就是如此，如果用一对绝对反义的词来分类，就相当于涵盖了事物的全体。当然，按照中国人中庸平和的观点，以及保守人士对未知可能性的假设，我们还可以设定一种中间态：半动态语言。你当然也可以叫它半静态语言。
所以，我们现在是在讨论一种很泛义的计算机语言工具。至少在眼下，它（在分类概念中）涵盖了计算机语言的二分之一。当然，限于我自身的能力，我只能讨论一种确指的工具，例如JavaScript。但我希望你由此看到的是计算机编程方法的基础，而不是某种愚人的器物。JavaScript 的生命力可能足够顽强，我假定它比C 语言还顽强，甚至比你我的生命都顽强。但它只是愚人的器物，因此反过来说：它能不能长久地存在并不重要，重要的是它能不能作为这“二分之一的泛义”来供我们讨论。
目 录
第1 部分 语言基础
第1 章十年 JavaScript....................................................................... 3
第 2 章 JavaScript 的语法................................................................... 31
第 2 部分 语言特性及基本应用
第3 章 JavaScript 的非函数式语言特性.................................................. 117
第 4 章 JavaScript 的函数式语言特性.................................................... 203
第 5 章 JavaScript 的动态语言特性....................................................... 279
第 3 部分 编程实践
第6 章元语言：QoBean 核心技术与实现............................................... 363
第 7 章一般性的动态函数式语言技巧.................................................... 415
附录A 术语表................................................................................445
附录B 主要引擎的特性差异列表..........................................................451
附录C 附图..................................................................................453
附录D 参考书目.............................................................................457
附录E 本书各版次主要修改...............................................................459