序言
大概很少有程序设计语言可以担当的起“优美”这两个字的,我们可以评论一个语言的语法简洁,代码可读性高(尽管这一点主要依赖于开发人员的水平,而并非语言本身),但是几乎不会说哪个语言是优美的,而 JavaScript 则是一个例外。
程序设计语言,主要可以分为两种,一种是我们平时接触较多的,工业级的程序设计语 言如 C/C++, JAVA,Object Pascal(DELPHI)等,从本质上来讲,这些语言是基于程序 存储原理,即冯.诺依曼体系的,一般被称为命令式编程语言,而另一种,是根据阿隆左.丘奇的 lambda 演算而产生的,如 Lisp,Scheme,被称为函数式编程语言。这两个体系一般情况下是互不干涉,泾渭分明的,这一现象直到 JavaScript 的逐渐成熟之后才被打破。
函数式语言被认为是晦涩难懂的,学院派的,使用 Lisp 的似乎都是些披头散发,满口之乎者也而且性情古怪的大学教授。Emacs,这个被它的爱好者誉为世界上最强大,最好用的编辑器的插件机制,就是基于一个 Lisp 的方言完成的,Emacs 应该可以算是函数式语言比较成功的运用案例之一,后来又出现了 Gimp,一个 Linux 平台下的图形图像处理软件,它使用另一个 Lisp 的方言来进行自己的扩展。如此看来,函数式编程似乎已经被人们所接受了,然而事实并非如此简单,那种“前缀的操作符”,“一切皆函数”的理念在短时间内是无法被诸如“数据结构+算法=程序”之类箴言束缚住思想的冯.诺依曼程序员所接受,直到JavaScript 的出现。
JavaScript 被称为具有 C 的语法的 Lisp,它完美的结合了这两个体系。C 的语法使得 它迅速的被习惯命令式编程的程序员所接受,从而得到了推广,而 Lisp 的内核则使得其代码以优美的形式和内涵超过了其他的命令式语言,从而成为非常流行的一门语言,根据 TIOBE 的编程语言排行统计,JavaScript 一直排在前十位(在第 8-第 9 之间徘徊)。然而,要转变长时间形成的编程习惯殊非易事,两个体系之间的一些理念具有根本性的差异,解决这个问题正是本书的一个目的,通过深入的学习 JavaScript 的内核思想,我们可以将另一个体系的思想应用在日常的工作中,提高代码的质量。
JavaScript 并不像它表现出来的那样简单,大多数 JavaScript 程序员在无需深入理解 JavaScript 运行机制的情况下也可以写出可运行的代码,但是这样的代码几乎没有可维护性,当出现了一个隐藏的较深的 bug 的情况下,程序员往往无法很快的定位错误可能的源头,从而花费大量的时间来进行 alert。因此,理解 JavaScript 运行机制,以及澄清其容易被误解的特性将有助于杜绝这种现象。
邱俊涛 2010 年 5 月于昆明
{$ activeFileHint $}