第 1 章 二十年來的 JavaScript 1
1.1 網頁中的代碼1
1.1.1 新鮮的玩意兒 1
1.1.2 寫在網頁中的第一段代碼 2
1.1.3 最初的價值 3
1.2 用 JavaScript 來寫瀏覽器上的應用5
1.2.2 Flash 的一席之地 7
1.2.3 RWC 與 RIA 之爭 8
1.3 沒有框架與庫的語言能怎樣發展呢 10
1.3.1 做一個框架10
1.3.2 重寫框架的語言層 .13
1.3.3 富瀏覽器端開發(RWC)與 AJAX14
1.4 語言的進化16
1.4.1 Qomo 的重生16
1.4.2 QoBean 是對語言的重新組織 .17
1.4.3 JavaScript 作為一門語言的進化18
1.5 大型系統開發20
1.5.1 框架與架構是不同的 .20
1.5.2 大型系統與分布式的環境 21
1.5.3 劃時代的 ES6.23
1.6 為 JavaScript 正名 24
1.6.1 JavaScript .25
1.6.1.1 Core JavaScript26
1.6.1.2 SpiderMonkey JavaScript 27
1.6.1.3 JScript .27
1.6.2 ECMAScript 28
1.7 JavaScript 的應用環境29
1.7.1 宿主環境 30
1.7.2 外殼程序
第 2 章 JavaScript 的語法 36
2.1 語法綜述 36
2.1.1 標識符所綁定的語義.37
2.1.2 識別語法錯誤與運行錯誤38
2.2 JavaScript 的語法:聲明 .40
2.2.1 變量的數據類型.40
第 2 章 JavaScript 的語法 . 36
2.1 語法綜述36
2.1.1 標識符所綁定的語義 37
2.1.2 識別語法錯誤與運行錯誤 .38
2.2 JavaScript 的語法:聲明40
2.2.2 變量聲明 45
2.2.4 其他聲明 53
2.2.4.1 常量聲明 ..53
2.2.4.2 符號聲明 ..54
2.2.4.3 函數聲明 ..55
2.3 JavaScript 的語法:表達式運算 ......56
2.3.1 一般表達式運算 .....59
2.3.2 比較運算 61
2.3.3 賦值運算 67
2.3.4 函數相關的表達式 .6
2.3.5 特殊作用的運算符 .72
2.3.6 運算優先級 ...76
2.4 JavaScript 的語法:語句 ....78
2.4.1 表達式語句 ...80
2.4.2 變量聲明語句 ..86
2.4.3 分支語句 87
2.4.4 循環語句 89
2.4.5 流程控制:一般子句 ....91
2.4.6 流程控制:異常 .....96
2.5 JavaScript 的語法:模塊 ....97
2.5.1 模塊的聲明與加載 .98
2.5.2 名字空間的特殊性 ......101
2.6 嚴格模式下的語法限制 ...105
2.6.1 語法限制 .....106
2.6.2 執行限制 .....108
2.6.3 嚴格模式的范圍 ... 110
2.7 運算符的二義性 ..... 112
2.7.1 加號“+”的二義性 .... 114
2.7.2 括號“( )”的二義性 ... 114
2.7.3 冒號“:”與標簽的二義性 116
2.7.4 大括號“{ }”的二義性 ..... 117
2.7.5 逗號“,”的二義性 .....122
2.7.6 方括號“[ ]”的二義性 ......123
2.7.7 語法設計中對二義性的處理.....127
第 3 章 JavaScript 的面向對象語言特性 . 130
3.1 面向對象編程的語法概要 ......130
3.1.1 對象聲明與實例創建 ..132
3.1.2 使用類繼承體系 ...141
3.1.3 對象成員 .....147
3.1.4 使用對象自身 157
3.1.5 符號 ......158
3.2 JavaScript 的原型繼承 ......161
3.2.1 空(null)與空白對象(empty) ......161
3.2.2 原型鏈的維護 171
3.2.3 原型繼承的實質 ...175
3.3 JavaScript 的類繼承 179
3.3.1 類是靜態的聲明 ...179
3.3.2 super 是全新的語法元素 ....181
3.3.3 類是用構造器(函數)來實現的 189
3.3.4 父類的默認值與 null 值 .....192
3.4 JavaScript 的對象系統 ......196
3.4.1 封裝與多態 .196
3.4.2 屬性 ......201
3.4.3 構造對象系統的方法 ..206
3.4.4 內置的對象系統 ...214
3.4.5 特殊效果的繼承 ...226
3.5 可定制的對象屬性 .229
3.5.1 屬性描述符 .230
3.5.2 定制對象屬性 233
3.5.3 屬性表的狀態 239
3.6 運行期侵入與元編程系統 ......242
3.6.1 關于運行期侵入 ...243
3.6.2 類類型與元類繼承 ......257
3.6.3 元編程模型 .266
第 4 章 JavaScript 語言的結構化 ..... 269
4.1 概述 ....269
4.1。1 命令式語言 .270
4.1.2 面向對象語言 275
4.1.3 再論語言的分類 ...281
4.1.4 JavaScript 的語源 ..283
4.2 基本的組織元素 .....284
4.2.1 標識符 ..285
4.2.2 表達式 ..286
4.2.3 語句 ......288
4.2.4 模塊 ......289
4.2.5 組織的原則 .290
4.3 聲明 ....294
4.3.1 聲明名字 .....295
4.3.2 確定性 ..296
4.3.3 頂層聲明 .....297
4.4 語句與代碼分塊 .....300
4.4.1 塊 ...301
4.4.2 塊與語句的語法結構 ..303
4.4.3 塊與聲明語句 309
4.4.4 塊與語句的值 312
4.5 組織形式分塊的方法 318
4.5.1 詞法作用域 .319
4.5.3 詞法作用域之間的相關性 .336
4.5.4 執行流程變更的內涵 ..337
4.6 層次結構程序設計 .340
4.6.1 屬性的可見性 341
4.6.2 多態的邏輯 .343
4.6.3 私有作用域的提出 ......347
4.7 歷史遺產:變量作用域 ...349
4.7.1 變量作用域 .350
4.7.2 變量的特殊性與變量作用域的關系 353
4.8 私有屬性與私有字段的紛爭356
4.8.1 私有屬性的提出 357
4.8.2 從私有屬性到私有成員 361
4.8.3 “類字段”提案的實現概要364
4.8.4 “私有屬性”提案的設計與提議 368
4.8.5 “私有屬性”提案的實現 .373
第 5 章 JavaScript 的函數式語言特性 ..... 381
5.1 概述 ....381
5.1.1 從代碼風格說起 ...382
5.1.2 為什么常見的語言不贊同連續求值 ...383
5.1.3 函數式語言的淵源 ......384
5.2 從運算式語言到函數式語言...386
5.2.1 JavaScript 中的幾種連續運算 ...386
5.2.2 如何消滅語句 391
5.2.3 運算式語言 .394
5.2.4 重新認識函數 397
5.2.5 函數式語言 .401
5.3 JavaScript 中的函數 405
5.3.1 參數 ......405
5.3.2 函數 ......418
5.3.3 函數的數據性質 ...431
5.3.4 函數與邏輯結構 ...439
5.4 函數的行為 ......443
5.4.1 構造 ......444
5.4.2 調用 ......448
5.4.3 方法調用 .....455
5.4.4 迭代 ......461
5.4.5 生成器中的迭代 ...466
5.5 閉包 ....475
5.5.1 閉包與函數實例 ...476
5.5.2 閉包的使用 .481
5.5.3 與閉包類似的實例化環境 .487
5.5.4 與閉包相關的一些特性 .....496
第 6 章 JavaScript 的動態語言特性 . 506
6.1 概述 ....506
6.1.1 動態數據類型的起源 ..507
6.1.2 動態執行系統 507
6.1.3 腳本系統的起源 ...509
6.1.4 腳本只是表現形式 ......510
6.2 動態類型:對象與值類型之間的轉換 .512
6.2.1 包裝類:面向對象的妥協 .512
6.2.2 從對象到值 .520
6.2.3 顯式的轉換 .529
6.3 動態類型:值類型的轉換 ......532
6.3.1 值運算:類型轉換的基礎 .532
6.3.2 值類型之間的轉換 ......535
6.3.3 值類型之間的顯式轉換 .....540
6.4 動態類型:對象與數組的動態特性 .....545
6.4.1 關聯數組與索引數組 ..545
6.4.2 索引數組作為對象的問題 .546
6.4.3 類數組對象:對象作為索引數組的應用 ..552
6.4.4 其他 ......554
6.5 重寫 ....555
6.5.1 標識符的重寫及其限制 .....555
6.5.2 原型重寫 .....567
6.5.3 構造器重寫 .569
6.5.4 對象成員的重寫 ...573
6.5.5 引擎對重寫的限制 ......578
6.6 動態執行 ...582
6.6.1 eval()作為函數名的特殊性 582
6.6.2 eval()在不同上下文環境中的效果 .....584
6.6.3 Eval 環境的獨特性 ......586
6.6.4 動態執行過程中的語句、表達式與值 ......593
6.6.5 序列化與反序列化 ......595
6.6.6 eval 對作用域的影響 ...600
6.6.7 其他的動態執行邏輯 ..601
6.7 動方法調用(call、apply 與 bind) .605
6.8 通用執行環境的實現 615
6.8.1 通用 DSL 的模型 ..616
6.8.2 實現 ECMAScript 引擎 ......624
6.8.3 與 DSL 的概念整合 .....635
第 7 章 JavaScript 的并行語言特性 . 638
7.1 概述 ......638
7.1.1 并行計算的思想 ...638
7.1.2 并行程序設計的歷史 ..642
7.1.3 并行語言特性在 JavaScript 中的歷史 645
7.2 Promise 的核心機制 ..647
7.2.1 Promise 的核心過程 ....647
7.2.2 Promise 類與對象的基本應用 ..654
7.2.3 Promise 的子類 .....663
7.2.4 執行邏輯 .....666
7.2.4.1 任務隊列 666
7.2.4.2 執行棧 ....667
7.3 與其他語言特性的交集 ...668
7.3.1 與函數式特性的交集:異步的函數 ...669
7.3.2 與動態特性的交集 ......677
7.3.3 對結構化特性帶來的沖擊 .683
7.3.3.4 異步方法與存取器 .....687
7.4 JavaScript 中對并發的支持 .....690
7.4.1 Agent、Agent Cluster 及其工作機制 ..691
7.4.2 SharedArrayBuffer 698
7.4.3 Atomics.701
7.5 在分布式網絡環境中的并行執行 ..706
7.5.2 構建一個集群環境 ......709
7.5.3 使用 PEDT 執行行任務 .713
7.5.4 可參考的意義 718
附錄 A 術語表 ... 719
附錄 B 參考書目 ...... 723
附錄 C 圖表索引 ...... 725
附錄 D 本書各版次主要修改 .. 731