你不知道的JavaScript(上卷)
上QQ阅读APP看书,第一时间看更新

前言

在互联网发展的早期,JavaScript就已经成为了支撑网页内容交互体验的基础技术。那时JavaScript的作用可能仅仅是生成一些闪烁的鼠标轨迹或者烦人的弹出窗口,但是经过了大约20年的发展,JavaScript的技术和能力都发生了天翻地覆的变化,现在的JavaScript毫无疑问已经成为了世界上使用范围最广的软件平台——互联网——的核心技术。

但是作为一个语言来说,它总是成为大家批评的对象,部分原因是它有很多历史遗留问题,但主要原因是它的设计哲学有问题。就像Brendan Eich曾经说过的,JavaScript甚至连名字都给人一种“蠢弟弟”的感觉,就像是它更成熟的大哥Java的不完整版本。不过名字只不过是营销策略上的一个意外,这两个语言有许多本质上的区别。JavaScript和Java的关系,就像Carnival(嘉年华)和Car(汽车)的关系一样,八竿子打不着。

JavaScript借鉴了许多语言的概念和语法,比如C风格的过程式编程以及不太明显的Scheme/Lisp风格的函数式编程,因此吸引了许多开发者,甚至是那些不会编程的新手。用JavaScript来编写“Hello World”是非常简单的,因此这门语言很有吸引力并且很好上手。

虽然JavaScript可能是最容易上手的语言之一,但是由于其本身的特殊性,相比其他语言,能真正掌握JavaScript的人比较少。如果想用C、C++这样的语言编写功能全面的程序,那需要对语言有很深的了解。但是对于JavaScript来说,编写功能全面的程序仅仅是冰山一角。

JavaScript语言本质上有许多复杂的概念,但是却用一种看起来比较简单的方式体现出来,比如回调函数,因此JavaScript开发者通常只是简单地使用这些特性,并不会关心语言内部的实现原理。

JavaScript既是一门充满吸引力、简单易用的语言,又是一门具有许多复杂微妙技术的语言,即使是经验丰富的JavaScript开发者,如果没有认真学习的话也无法真正理解它们。这就是JavaScript的矛盾之处,也是这门语言的阿喀琉斯之踵指某人或某事物的最大或者唯一弱点,即罩门关键所在。——译者注。由于JavaScript不必理解就可以使用,因此通常来说很难真正理解语言本身,这就是我们面临的挑战。

使命

如果每次遇到JavaScript中出乎意料的行为时,你的反应就是把它加入黑名单(很多人都是这么做的),那用不了多久你就会把JavaScript语言真正的多样性全部排除。

剩下的部分就是非常著名的“好的部分”(Good Parts),但是亲爱的读者们,我恳请你们把它称作“简单的部分”“安全的部分”甚至“不完整的部分”。

“你不知道的JavaScript”系列丛书要做的事恰好相反:学习并且深入理解整个JavaScript,尤其是那些“难的部分”。

在本书中,我们要直面当前JavaScript开发者不求甚解的大趋势,他们往往不会深入理解语言内部的机制,遇到困难就会退缩。我们要做的恰好相反,不是退缩,而是继续前进。

你们应当像我一样,不满足于只是让代码正常工作,而是想要弄清楚“为什么”。我希望你能勇于挑战这条崎岖颠簸的“少有人走的路”,拥抱整个JavaScript。掌握了这些知识之后,无论什么技术、框架和流行词语你都能轻松理解。

这个系列中的每本书专注于语言中一个最容易被误解或者最难理解的核心部分,进行深入、详尽的介绍。在阅读本书时,你应当审视自己对于JavaScript的理解,仔细思考书中讲解的理论和那些“你需要知道”的东西。

现在你所理解的JavaScript很可能是从别人那里学来的不完整版。这样的JavaScript只是真正的JavaScript的影子。学完这个系列之后,你就会掌握真正的JavaScript。读下去吧,我的朋友,JavaScript恭候你的光临。

小结

JavaScript非常特殊,只学一部分的话非常简单,但是想要完整地学习会很难(就算学到够用也不容易)。当开发者感到迷惑时,他们通常会责怪语言本身,而不是怪自己对语言缺乏了解。这个系列就是为了解决这个问题,让你打心眼儿里欣赏这门语言。

本书中的许多例子都需要运行在即将到来的现代JavaScript引擎环境中,比如ES6。部分代码在旧(ES6之前的)引擎上可能无法正常运行。

本书排版约定

本书中使用以下排版约定。

· 楷体

表示新的术语。

· 等宽字体

表示代码段以及段落中的程序元素,比如变量、函数名、数据库、数据类型、环境变量、语句以及关键字。

· 等宽粗体

表示命令中不可改动的部分。

· 等宽斜体

表示将由用户提供的值(或由上下文确定的值)替换的文本。

这个图标表示提示或建议。

这个图标表示重要说明。

这个图标表示警告或提醒。

使用代码示例

可以在这里下载本书第一部分“作用域和闭包”随附的资料(代码示例、练习题等):http://bit.ly/1c8HEWF

可以在这里下载本书第二部分“this和对象原型”随附的资料(代码示例、练习题等):http://bit.ly/ydkjs-this-code

让本书助你一臂之力。也许你需要在自己的程序或文档中用到本书中的代码。除非大段大段地使用,否则不必与我们联系取得授权。例如,无需请求许可,就可以用本书中的几段代码写成一个程序。但是销售或者发布O'Reilly图书中代码的光盘则必须事先获得授权。引用书中的代码来回答问题也无需授权。将大段的示例代码整合到你自己的产品文档中则必须经过许可。

使用我们的代码时,希望你能标明它的出处,但不强求。出处信息一般包括书名、作者、出版商和书号,例如:Scope and Closures, Kyle Simpson著(O'Reilly, 2014)。版权所有,978-1-491-33558-8。

如果还有关于使用代码的未尽事宜,可以随时与我们联系:permissions@oreilly.com。

Safari®Books Online

Safari Books Online(http://www.safaribooksonline.com)是应需而变的数字图书馆。它同时以图书和视频的形式出版世界顶级技术和商务作家的专业作品。

Safari Books Online是技术专家、软件开发人员、Web设计师、商务人士和创意人士开展调研、解决问题、学习和认证培训的第一手资料。

对于组织团体、政府机构和个人,Safari Books Online提供各种产品组合和灵活的定价策略。用户可通过一个功能完备的数据库检索系统访问O'Reilly Media、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBM Redbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones & Bartlett、Course Technology以及其他几十家出版社的上千种图书、培训视频和正式出版之前的书稿。要了解Safari Books Online的更多信息,我们网上见。

联系我们

请把对本书的评价和问题发给出版社。

美国:

O'Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

O'Reilly的每一本书都有专属网页,你可以在那儿找到本书的相关信息,包括勘误表、示例代码以及其他信息。本书第一部分“作用域和闭包”的网址是http://oreil.ly/JS_scope_closures。本书第二部分“this和对象原型”的网址是http://bit.ly/ydk-js-this-object-prototypes

对于本书的评论和技术性问题,请发送电子邮件到:

bookquestions@oreilly.com

要了解更多O'Reilly图书、培训课程、会议和新闻的信息,请访问以下网站:

http://www.oreilly.com

我们在Facebook的地址如下:http://facebook.com/oreilly

请关注我们的Twitter动态:http://twitter.com/oreillymedia

我们的YouTube视频地址如下:http://www.youtube.com/oreillymedia

要查看“你不知道的JavaScript”系列丛书中的全部图书,请访问:

http://YouDontKnowJS.com