内容简介
很多人对Javascript这门语言的印象都是简单易学,很容易上手。虽然Javascript语言本身有很多复杂的概念,但语言的使用者不必深入理解这些概念可以编写能的应用。殊不知,这些复杂精妙的概念才是语言的精髓,即使是经验丰富的Javascript开发人员,如果没有认真学也无法真正理解它们。在本书中,我们要直面当前Javascript开 发者“不求甚解”的大趋势,深入理解语言内部的机制。 ;《你不知道的Javascript(上卷)》既适合Javascript语言初学者阅读,又适合经验丰富的Javascript开发人员深入学/p>
目录
目录前言 ;VIII第 一部分 作用域和序 ;2第 1章 作用域是什么 ;41.1 编译原理 ;41.2 理解作用域 ;61.2.1 演员表 ;61.2.2 对话 ;61.2.3 编译器有话说 ;71.2.4 引擎和作用域的对话 ;91.2.5 小测验 ;101.3 作用域嵌套 ;101.4 异常 ;121.5 小结 ;12第 2章 词法作用域 ;142.1 词法阶段 ;142.2 欺骗词法 ;172.2.1 eval ;172.2.2 with ;182.2.3 能 ;202.3 小结 ;21第3章 函数作用域和块作用域 ;223.1 函数中的作用域 ;223.2 隐藏内部实现 ;233.3 函数作用域 ;263.3.1 匿名和具名 ;273.3.2 立即执行函数表达式 ;283.4 块作用域 ;303.4.1 with ;313.4.2 try/catch ;313.4.3 let ;323.4.4 const ;353.5 小结 ;36第4章 提升 ;374.1 先有鸡还是先有蛋 ;374.2 编译器再度来袭 ;384.3 函数优先 ;404.4 小结 ;41第5章 作用域 ;435.1 启示 ;435.2 实质问题 ;445.3 现在我懂了 ;475.4 循环和 ;485.5 模块 ;515.5.1 现代的模块机制 ;545.5.2 未来的模块机制 ;565.6 小结 ;57附录A 动态作用域 ;58附录B 块作用域的替代方案 ;60附录C this词法 ;64附录D 致谢 ;67第 二部分 this和对象原型序 ;72第 1章 关于this ;741.1 为什么要用this ;741.2 误解 ;761.2.1 指向自身 ;761.2.2 它的作用域 ;791.3 this到底是什么 ;801.4 小结 ;80第 2章 this解析 ;822.1 调用位置 ;822.2 绑定规则 ;832.2.1 默认绑定 ;832.2.2 隐式绑定 ;852.2.3 显式绑定 ;872.2.4 new绑定 ;902.3 优先级 ;912.4 绑定例外 ;952.4.1 被忽略的this ;962.4.2 间接引用 ;972.4.3 软绑定 ;982.5 this词法 ;992.6 小结 ;101第3章 对象 ;1023.1 语法 ;1023.2 类型 ;1033.3 内容 ;1053.3.1 可计算属名 ;1063.3.2 属与方法 ;1073.3.3 数组 ;1083.3.4 对象 ;1093.3.5 属描述符 ;1113.3.6 不变 ;1143.3.7 [[Get]] ;1153.3.8 [[Put]] ;1163.3.9 Getter和Setter ;1173.3.10 存在 ;1193.4 遍历 ;1213.5 小结 ;124第4章 混合对象“类” ;1264.1 类理论 ;1264.1.1 “类”设计模式 ;1274.1.2 Javascript中的“类” ;1284.2 类的机制 ;1284.2.1 建造 ;1284.2.2 构造函数 ;1304.3 类的继承 ;1304.3.1 多态 ;1324.3.2 多重继承 ;1344.4 混入 ;1344.4.1 显式混入 ;1354.4.2 隐式混入 ;1394.5 小结 ;140第5章 原型 ;1425.1 [[Prototype]] ;1425.1.1 Object.prototype ;1445.1.2 属设置和屏蔽 ;1445.2 “类” ;1465.2.1 “类”函数 ;1465.2.2 “构造函数” ;1495.2.3 技术 ;1515.3 (原型)继承 ;1535.4 对象关联 ;1595.4.1 创建关联 ;1595.4.2 关联关系是备用 ;1615.5 小结 ;162第6章 行为委托 ;1646.1 面向委托的设计 ;1656.1.1 类理论 ;1656.1.2 委托理论 ;1666.1.3 比较思维模型 ;1706.2 类与对象 ;1736.2.1 控件“类” ;1746.2.2 委托控件对象 ;1766.3 更简洁的设计 ;1786.4 更好的语法 ;1826.5 内省 ;1856.6 小结 ;187附录A ES6中的Class ;189
摘要与插图
第1章
作用域是什么
几乎所有编程语言基本能之一,是能够储存变量当中的值,并且能在之后对这个行访问或修改。事实上,正是这种储存和访问变量的值的能力将状态带给了程序。
若没有了状态这个概念,程序虽然也能够执行一些简单的任务,但它会受到高度限制,做不到有趣。
但是将变量引入程序会引起几个很有意思的问题,也正是我们将要讨论的:这些变量住在哪里?换句话说,它们储存在哪里?重要的是,程序需要时如何找到它们?
这些问题说明需要一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量。
这套规则被称为作用域。
但是,究竟在哪里而且怎样设置这些作用域的规则呢?
1.1编译原理
尽管通常将Javascript归类为“动态”或“解释执行”语言,但事实上它是一门编译语言。这个事实对你来说可能显而易见,也可能你闻所未闻,取决于你接触过多少编程语言,具有多少经验。但与传统的编译语言不同,它不是提前编译的,编译结果也不能在分布式系统行移植。
尽管如此,Javascript引行编译的步骤和传统的编译语言相似,在某些环节可能比预想的要复杂……