编辑推荐
JavaScript语言有很多复杂的概念,但却用简单的方式体现出来(比如回调函数),因此,JavaScript开发者无需理解语言内部的原理,就能编写出功能全面的程序;就像收音机一样,你无需理解里面的管子和线圈都是做什么用的,只要会操作收音机上的按键,就可以收听你喜欢的节目。然而,JavaScript的这些复杂精妙的概念才是语言的精髓,即使是经验丰富的JavaScript开发者,如果没有认真学习也无法真正理解语言本身的特性。正是因为绝大多数人不求甚解,一遇到出乎意料的行为就认为是语言本身有缺陷,进而把相关的特性加入黑名单,久而久之就排除了这门语言的多样性,人为地使它变得不完整、不安全。
“你不知道的JavaScript”系列就是要让不求甚解的JavaScript开发者迎难而上,深入语言内部,弄清楚JavaScript每一个零部件的用途。《图灵程序设计丛书:你不知道的JavaScript(上卷)》介绍了该系列的两个主题:“作用域和闭包”以及“this和对象原型”。掌握了这些知识之后,无论什么技术、框架和流行词语,你都能轻松理解。内容简介
很多人对JavaScript这门语言的印象都是简单易学,很容易上手。虽然JavaScript语言本身有很多复杂的概念,但语言的使用者不必深入理解这些概念就可以编写出功能全面的应用。殊不知,这些复杂精妙的概念才是语言的精髓,即使是经验丰富的JavaScript开发人员,如果没有认真学习的话也法真正理解它们。在《图灵程序设计丛书:你不知道的JavaScript(上卷)》中,我们要直面当前JavaScript开发者“不求甚解”的大趋势,深入理解语言内部的机制。
《图灵程序设计丛书:你不知道的JavaScript(上卷)》既适合JavaScript语言初学者阅读,又适合经验丰富的JavaScript开发人员深入学习。作者简介
KyleSimpson,推崇开放的互联网,对JavaScript、HTML5、实时/端对端通信和Web性能有深入研究。他是技术书作家、技术培训师、讲师和开源社区的活跃成员。精彩书评
★“Kyle对JavaScript语言每一个细节的缜密思考方式,会潜移默化地移植到我们的头脑和日常工作流程当中。”
——ShaneHudson,自由前端开发者
★“原型使JavaScript语言功能强大,但也令开发人员备感困惑。《图灵程序设计丛书:你不知道的JavaScript(上卷)》第二部分‘this和对象原型’精妙地解释了原型、继承和JavaScript中‘类’的概念。”
——DavidWalsh,Mozilla前端工程师目录
前言
第一部分作用域和闭包
序
第1章作用域是什么
1.1编译原理
1.2理解作用域
1.2.1演员表
1.2.2对话
1.2.3编译器有话说
1.2.4引擎和作用域的对话
1.2.5小测验
1.3作用域嵌套
1.4异常
1.5小结
第2章词法作用域
2.1词法阶段
2.2欺骗词法
2.2.1eval
2.2.2with
2.2.3性能
2.3小结
第3章函数作用域和块作用域
3.1函数中的作用域
3.2隐藏内部实现
3.3函数作用域
3.3.1匿名和具名
3.3.2立即执行函数表达式
3.4块作用域
3.4.1with
3.4.2try/catch
3.4.3let
3.4.4const
3.5小结
第4章提升
4.1先有鸡还是先有蛋
4.2编译器再度来袭
4.3函数优先
4.4小结
第5章作用域闭包
5.1启示
5.2实质问题
5.3现在我懂了
5.4循环和闭包
5.5模块
5.5.1现代的模块机制
5.5.2未来的模块机制
5.6小结
附录A动态作用域
附录B块作用域的替代方案
附录Cthis词法
附录D致谢
第二部分this和对象原型
序
第1章关于this
……前言/序言
在互联网发展的早期,JavaScript就已经成为了支撑网页内容交互体验的基础技术。那时JavaScript的作用可能仅仅是生成一些闪烁的鼠标轨迹或者烦人的弹出窗口,但是经过了大约20年的发展,JavaScript的技术和能力都发生了天翻地覆的变化,现在的JavaScript毫无疑问已经成为了世界上使用范围最广的软件平台——互联网——的核心技术。
但是作为一个语言来说,它总是成为大家批评的对象,部分原因是它有很多历史遗留问题,但主要原因是它的设计哲学有问题。就像BrendanEich曾经说过的,JavaScript甚至连名字都给人一种“蠢弟弟”的感觉,就像是它更成熟的大哥Java的不完整版本。不过名字只不过是营销策略上的一个意外,这两个语言有许多本质上的区别。JavaScript和Java的关系,就像Carnival(嘉年华)和Car(汽车)的关系一样,八竿子打不着。
JavaScript借鉴了许多语言的概念和语法,比如C风格的过程式编程以及不太明显的Scheme/List风格的函数式编程,因此吸引了许多开发者,甚至是那些不会编程的新手。用JavaScript来编写“HelloWorld”是非常简单的,因此这门语言很有吸引力并且很好上手。
虽然JavaScript可能是最早出现的语言之一,但是由于其本身的特殊性,相比其他语言,能真正掌握JavaScript的人比较少。如果想用C、C++这样的语言编写功能全面的程序,那需要对语言有很深的了解。但是对于JavaScript来说,编写功能全面的程序仅仅是冰山一角。
JavaScript语言本质上有许多复杂的概念,但是却用一种看起来比较简单的方式体现出来,比如回调函数,因此JavaScript开发者通常只是简单地使用这些特性,并不会关心语言内部的实现原理。
JavaScript既是一门充满吸引力、简单易用的语言,又是一门具有许多复杂微妙技术的语言,即使是经验丰富的JavaScript开发者,如果没有认真学习的话也无法真正理解它们。
这就是JavaScript的矛盾之处,也是这门语言的阿喀琉斯之踵。由于JavaScript不必理解就可以使用,因此通常来说很难真正理解语言本身,这就是我们面临的挑战。
使命
如果每次遇到JavaScript中出乎意料的行为时,你的反应就是把它加入黑名单(很多人都是这么做的),那用不了多久你就会把JavaScript语言真正的多样性全部排除。
剩下的部分就是非常著名的“好的部分”(GoodParts),但是亲爱的读者们,我恳请你们把它称作“简单的部分”、“安全的部分”甚至“不完整的部分”。
“你不知道的JavaScript”系列丛书要做的事恰好相反:学习并且深入理解整个JavaScript,尤其是那些“难的部分”。
在《图灵程序设计丛书:你不知道的JavaScript(上卷)》中,我们要直面当前JavaScript开发者不求甚解的大趋势,他们往往不会深入理解语言内部的机制,遇到困难就会退缩。我们要做的恰好相反,不是退缩,而是继续前进。
你们应当像我一样,不满足于只是让代码正常工作,而是想要弄清楚“为什么”。我希望你能勇于挑战这条崎岖颠簸的“少有人走的路”,拥抱整个JavaScript。掌握了这些知识之后,无论什么技术、框架和流行词语你都能轻松理解。
这个系列中的每《图灵程序设计丛书:你不知道的JavaScript(上卷)》专注于语言中一个最容易被误解或者最难理解的核心部分,进行深入、详尽的介绍。在阅读《图灵程序设计丛书:你不知道的JavaScript(上卷)》时,你应当审视自己对于JavaScript的理解,仔细思考书中讲解的理论和那些“你需要知道”的东西。
现在你所理解的JavaScript很可能是从别人那里学来的不完整版。这样的JavaScript只是真正的JavaScript的影子。学完这个系列之后,你就会掌握真正的JavaScript。读下去吧,我的朋友,JavaScript恭候你的光临。
小结
JavaScript非常特殊,只学一部分的话非常简单,但是想要完整地学习会很难(就算学到够用也不容易)。当开发者感到迷惑时,他们通常会责怪语言本身,而不是怪自己对语言缺乏了解。这个系列就是为了解决这个问题,让你打心眼儿里欣赏这门语言。