小苏子
小苏子PDF在线图书

你不知道的JavaScript(上卷) 内容简介

你不知道的JavaScript(上卷) 内容简介

你不知道的JavaScript(上卷) 目录

你不知道的JavaScript(上卷) 精彩文摘

很多人对JavaScript这门语言的印象都是简单易学,很容易上手。虽然JavaScript语言本身有很多复杂的概念,但语言的使用者不必深入理解这些概念就可以编写出功能全面的应用。殊不知,这些复杂精妙的概念才是语言的精髓,即使是经验丰富的JavaScript开发人员,如果没有认真学习的话也法真正理解它们。在《图灵程序设计丛书:你不知道的JavaScript(上卷)》中,我们要直面当前JavaScript开发者“不求甚解”的大趋势,深入理解语言内部的机制。《图灵程序设计丛书:你不知道的JavaScript(上卷)》既适合JavaScript语言初学者阅读,又适合经验丰富的JavaScript开发人员深入学习。版权信息前言第一部分 作用域和闭包序第1章 作用域是什么1.1 编译原理1.2 理解作用域1.3 作用域嵌套1.4 异常1.5 小结第2章 词法作用域2.1 词法阶段2.2 欺骗词法2.3 小结第3章 函数作用域和块作用域3.1 函数中的作用域3.2 隐藏内部实现3.3 函数作用域3.4 块作用域3.5 小结第4章 提升4.1 先有鸡还是先有蛋4.2 编译器再度来袭4.3 函数优先4.4 小结第5章 作用域闭包5.1 启示5.2 实质问题5.3 现在我懂了5.4 循环和闭包5.5 模块5.6 小结附录A 动态作用域附录B 块作用域的替代方案B.1 TraceurB.2 隐式和显式作用域B.3 性能附录C this词法附录D 致谢第二部分 this和对象原型序第1章 关于this1.1 为什么要用this1.2 误解1.3 this到底是什么1.4 小结第2章 this全面解析2.1 调用位置2.2 绑定规则2.3 优先级2.4 绑定例外2.5 this词法2.6 小结第3章 对象3.1 语法3.2 类型3.3 内容3.4 遍历3.5 小结第4章 混合对象“类”4.1 类理论4.2 类的机制4.3 类的继承4.4 混入4.5 小结第5章 原型5.1 [[Prototype]]5.2 “类”5.3 (原型)继承5.4 对象关联5.5 小结第6章 行为委托6.1 面向委托的设计6.2 类与对象6.3 更简洁的设计6.4 更好的语法6.5 内省6.6 小结附录A ES6中的ClassA.1 classA.2 class陷阱A.3 静态大于动态吗A.4 小结几乎所有编程语言最基本的功能之一,就是能够储存变量当中的值,并且能在之后对这个值进行访问或修改。事实上,正是这种储存和访问变量的值的能力将状态带给了程序。若没有了状态这个概念,程序虽然也能够执行一些简单的任务,但它会受到高度限制,做不到非常有趣。但是将变量引入程序会引起几个很有意思的问题,也正是我们将要讨论的:这些变量住在哪里?换句话说,它们储存在哪里?最重要的是,程序需要时如何找到它们?这些问题说明需要一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量。这套规则被称为作用域。但是,究竟在哪里而且怎样设置这些作用域的规则呢?尽管通常将JavaScript归类为“动态”或“解释执行”语言,但事实上它是一门编译语言。这个事实对你来说可能显而易见,也可能你闻所未闻,取决于你接触过多少编程语言,具有多少经验。但与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统中进行移植。尽管如此,JavaScript引擎进行编译的步骤和传统的编译语言非常相似,在某些环节可能比预想的要复杂。在传统编译语言的流程中,程序中的一段源代码在执行之前会经历三个步骤,统称为“编译”。分词/词法分析(Tokenizing/Lexing)这个过程会将由字符组成的字符串分解成(对编程语言来说)有意义的代码块,这些代码块被称为词法单元(token)。例如,考虑程序var a = 2;。这段程序通常会被分解成为下面这些词法单元:var、a、=、2 、;。空格是否会被当作词法单元,取决于空格在这门语言中是否具有意义。解析/语法分析(Parsing)这个过程是将词法单元流(数组)转换成一个由元素逐级嵌套所组成的代表了程序语法结构的树。这个树被称为“抽象语法树”(Abstract Syntax Tree,AST)。var a = 2;的抽象语法树中可能会有一个叫作VariableDeclaration的顶级节点,接下来是一个叫作Identifier(它的值是a)的子节点,以及一个叫作AssignmentExpression的子节点。AssignmentExpression节点有一个叫作NumericLiteral(它的值是2)的子节点。代码生成将AST转换为可执行代码的过程称被称为代码生成。这个过程与语言、目标平台等息息相关。抛开具体细节,简单来说就是有某种方法可以将var a = 2;的AST转化为一组机器指令,用来创建一个叫作a的变量(包括分配内存等),并将一个值储存在a中。关于引擎如何管理系统资源超出了我们的讨论范围,因此只需要简单地了解引擎可以根据需要创建并储存变量即可。比起那些编译过程只有三个步骤的语言的编译器,JavaScript引擎要复杂得多。例如,在语法分析和代码生成阶段有特定的步骤来对运行性能进行优化,包括对冗余元素进行优化等。因此在这里只进行宏观、简单的介绍,接下来你就会发现我们介绍的这些看起来有点高深的内容与所要讨论的事情有什么关联。

赞(0)
未经允许不得转载:小苏子图书 » 你不知道的JavaScript(上卷) 内容简介