你不知道的JavaScript(上卷)pdf
第一部分 作用域和閉包
序 2
第1章 作用域是什麼 4
1.1 編譯原理 4
1.2 理解作用域 6
1.2.1 演員表 6
1.2.2 對話 6
1.2.3 編譯器有話說 7
1.2.4 引擎和作用域的對話 9
1.2.5 小測驗 10
1.3 作用域巢狀 10
1.4 異常 12
1.5 小結 12
第2章 詞法作用域 14
2.1 詞法階段 14
2.2 欺騙詞法 17
2.2.1 eval 17
2.2.2 with 18
2.2.3 效能 20
2.3 小結 21
第3章 函式作用域和塊作用域 22
3.1 函式中的作用域 22
3.2 隱藏內部實現 23
3.3 函式作用域 26
3.3.1 匿名和具名 27
3.3.2 立即執行函式表示式 28
3.4 塊作用域 30
3.4.1 with 31
3.4.2 try/catch 31
3.4.3 let 32
3.4.4 const 35
3.5 小結 36
第4章 提升 37
4.1 先有雞還是先有蛋 37
4.2 編譯器再度來襲 38
4.3 函式優先 40
4.4 小結 41
第5章 作用域閉包 43
5.1 啟示 43
5.2 實質問題 44
5.3 現在我懂了 47
5.4 迴圈和閉包 48
5.5 模組 51
5.5.1 現代的模組機制 54
5.5.2 未來的模組機制 56
5.6 小結 57
附錄A 動態作用域 58
附錄B 塊作用域的替代方案 60
附錄C this詞法 64
附錄D 致謝 67
第二部分 this和物件原型
序 72
第1章 關於this 74
1.1 為什麼要用this 74
1.2 誤解 76
1.2.1 指向自身 76
1.2.2 它的作用域 79
1.3 this到底是什麼 80
1.4 小結 80
第2章 this全面解析 82
2.1 呼叫位置 82
2.2 繫結規則 83
2.2.1 預設繫結 83
2.2.2 隱式繫結 85
2.2.3 顯式繫結 87
2.2.4 new繫結 90
2.3 優先順序 91
2.4 繫結例外 95
2.4.1 被忽略的this 96
2.4.2 間接引用 97
2.4.3 軟繫結 98
2.5 this詞法 99
2.6 小結 101
第3章 物件 102
3.1 語法 102
3.2 型別 103
3.3 內容 105
3.3.1 可計算屬性名 106
3.3.2 屬性與方法 107
3.3.3 陣列 108
3.3.4 複製物件 109
3.3.5 屬性描述符 111
3.3.6 不變性 114
3.3.7 [[Get]] 115
3.3.8 [[Put]] 116
3.3.9 Getter和Setter 117
3.3.10 存在性 119
3.4 遍歷 121
3.5 小結 124
第4章 混合物件“類” 126
4.1 類理論 126
4.1.1 “類”設計模式 127
4.1.2 JavaScript中的“類” 128
4.2 類的機制 128
4.2.1 建造 128
4.2.2 建構函式 130
4.3 類的繼承 130
4.3.1 多型 132
4.3.2 多重繼承 134
4.4 混入 134
4.4.1 顯式混入 135
4.4.2 隱式混入 139
4.5 小結 140
第5章 原型 142
5.1 [[Prototype]] 142
5.1.1 Object.prototype 144
5.1.2 屬性設定和遮蔽 144
5.2 “類” 146
5.2.1 “類”函式 146
5.2.2 “建構函式” 149
5.2.3 技術 151
5.3 (原型)繼承 153
5.4 物件關聯 159
5.4.1 建立關聯 159
5.4.2 關聯關係是備用 161
5.5 小結 162
第6章 行為委託 164
6.1 面向委託的設計 165
6.1.1 類理論 165
6.1.2 委託理論 166
6.1.3 比較思維模型 170
6.2 類與物件 173
6.2.1 控制元件“類” 174
6.2.2 委託控制元件物件 176
6.3 更簡潔的設計 178
6.4 更好的語法 182
6.5 內省 185
6.6 小結 187
附錄A ES6中的Class 189