注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計程序設(shè)計綜合JavaScript核心原理:規(guī)范、邏輯與設(shè)計

JavaScript核心原理:規(guī)范、邏輯與設(shè)計

JavaScript核心原理:規(guī)范、邏輯與設(shè)計

定 價:¥99.80

作 者: 周愛民
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787115608925 出版時間: 2023-07-01 包裝: 平裝-膠訂
開本: 128開 頁數(shù): 字?jǐn)?shù):  

內(nèi)容簡介

  本書是一本JavaScript精進(jìn)指南,全面剖析JavaScript的核心技術(shù)。全書共分為6篇,第一篇講解JavaScript的基礎(chǔ)概念,第二篇講解JavaScript的運(yùn)行過程,第三篇講解JavaScript面向?qū)ο缶幊腆w系中最核心的設(shè)計,第四篇講解JavaScript作為動態(tài)語言的主要特性,第五篇講解JavaScript作為并行語言的主要持性,第六篇講解ECMAScript 2019之后的新增特性,并對ECMAScript 2022之后將添加的特性進(jìn)行解析。 每章用一行代碼引出,所講內(nèi)容包括該行代碼的特殊性、所涉問題的領(lǐng)域、逐步的解析、相似或同類的問題、潛在的應(yīng)用、不為人知的歷史、標(biāo)準(zhǔn)規(guī)范對此代碼的態(tài)度、業(yè)界的看法與爭議等。 本書適合有一定編程基礎(chǔ)的JavaScript開發(fā)人員與深度愛好者閱讀,幫助讀者深入理解JavaScript核心原理,實(shí)現(xiàn)從粗通到精通的進(jìn)階。

作者簡介

  周愛民,國內(nèi)軟件開發(fā)界資深架構(gòu)師、軟件工程師。有20余年的軟件開發(fā)與架構(gòu)、項(xiàng)目管理、團(tuán)隊(duì)建設(shè)的經(jīng)驗(yàn),曾任盛大網(wǎng)絡(luò)平臺架構(gòu)師、支付業(yè)務(wù)架構(gòu)師、豌豆英架構(gòu)師和上海南潮架構(gòu)師等職。從1998年開始了解并應(yīng)用JavaScript,著有前端“綠皮書”《JavaScript語言精髓與編程實(shí)踐》,曾發(fā)布Qomo、 QoBean及分布式架構(gòu)框架N4C等開源項(xiàng)目。已出版的其他作品有《大道至簡》 《大道至易》和《Delphi源代碼分析》。

圖書目錄

第 一篇 從零開始:重新認(rèn)識JavaScript語言的基礎(chǔ)概念
第 1章 生存周期:JavaScript變量與引用的銷毀 2
1.1 習(xí)慣中用“引用”來區(qū)別數(shù)據(jù)類型的操作方式 3
1.1.1 刪除運(yùn)算到底在試圖銷毀什么 4
1.1.2 表達(dá)式的結(jié)果是什么 4
1.2 深入理解“引用(規(guī)范類型)” 5
1.3 引用在引擎內(nèi)部的主要行為 6
1.4 從引用的發(fā)現(xiàn)到銷毀 6
1.5 小結(jié) 7
第 2章 賦值:賦值過程中出現(xiàn)變量泄露的原因 9
2.1 從變量聲明到賦值綁定的全程解析 10
2.1.1 賦值在語言設(shè)計中稱為綁定 11
2.1.2 用賦值語法實(shí)現(xiàn)綁定導(dǎo)致的問題 12
2.2 變量泄露:向一個不存在的變量賦值 12
2.3 在連續(xù)賦值過程中發(fā)生的行為細(xì)節(jié) 14
2.4 在應(yīng)用中使用“賦值語句魔法”的技巧 15
2.5 小結(jié) 16
第3章 表達(dá)式:對運(yùn)算過程的觀察與分析 17
3.1 在運(yùn)算過程中丟失的數(shù)據(jù)的難解之謎 18
3.1.1 深度解析聲明語句與賦值表達(dá)式的語義差別 18
3.1.2 來自《JavaScript權(quán)威指南》的解釋 19
3.2 表達(dá)式連續(xù)運(yùn)算過程中的變量、值與引用 20
3.3 用代碼重現(xiàn)引用覆蓋的現(xiàn)場 21
3.4 技術(shù)的取巧之處 22
3.5 小結(jié) 23
第4章 名字與導(dǎo)出:“有名字”是構(gòu)建邏輯的基礎(chǔ) 24
4.1 能導(dǎo)出的只有名字和值 25
4.1.1 代碼就是文本 25
4.1.2 詳解export的語法與語義 25
4.2 export導(dǎo)出名字的具體邏輯 27
4.2.1 導(dǎo)出:同化名字與值的處理邏輯 27
4.2.2 綁定:通過執(zhí)行頂層代碼實(shí)現(xiàn)的裝配過程 28
4.2.3 問題:函數(shù)表達(dá)式執(zhí)行中不綁定名字 28
4.3 匿名函數(shù)定義及其名字處理 29
4.4 有關(guān)導(dǎo)出語句的一些補(bǔ)充 30
4.5 小結(jié) 31
第5章 作用域:循環(huán)計算成本高昂的原因 32
5.1 代碼分塊與塊級作用域 33
5.2 循環(huán)語句中的塊 34
5.2.1 特例 35
5.2.2 特例中的特例 35
5.3 第二個作用域的必要性 36
5.4 for循環(huán)在運(yùn)行時需要更多作用域 37
5.5 小結(jié) 38
第二篇 從表達(dá)式到執(zhí)行引擎:運(yùn)行代碼的核心機(jī)制
第6章 執(zhí)行環(huán)境的秘密:語句的運(yùn)行與完成的視角 40
6.1 用中斷代替跳轉(zhuǎn) 41
6.1.1 跳轉(zhuǎn)到語句結(jié)束的位置 41
6.1.2 跳轉(zhuǎn)到標(biāo)簽約定的位置 42
6.2 執(zhí)行現(xiàn)場的回收 43
6.3 語句執(zhí)行的意義 44
6.4 中斷語句的特殊性 45
6.4.1 最小化的break語句 46
6.4.2 返回empty的語句 46
6.5 小結(jié) 46
第7章 深入探索JavaScript中的特殊執(zhí)行體 47
7.1 抽象確定邏輯的執(zhí)行體 48
7.2 幾種特殊的可執(zhí)行結(jié)構(gòu) 48
7.2.1 參數(shù)表 48
7.2.2 擴(kuò)展風(fēng)格的參數(shù)表 49
7.2.3 賦值模式 50
7.3 模板字面量 52
7.4 小結(jié) 53
第8章 閉包、函數(shù)與函數(shù)式編程語言的關(guān)系 54
8.1 函數(shù)的一體兩面 55
8.1.1 在運(yùn)行期一個實(shí)例有多個閉包 55
8.1.2 閉包用于承載兩個語義組件 56
8.2 簡單參數(shù)類型 57
8.2.1 傳入?yún)?shù)的處理 57
8.2.2 意外 58
8.2.3 未初始化綁定 58
8.3 最小化的函數(shù)式編程語言示例 59
8.4 小結(jié) 60
第9章 迭代過程及其出錯處理機(jī)制 61
9.1 遞歸與迭代 62
9.1.1 迭代對執(zhí)行過程的重造和使用 63
9.1.2 展開語法 63
9.2 JavaScript中如何實(shí)現(xiàn)迭代處理 64
9.2.1 內(nèi)部迭代過程 64
9.2.2 不可思議的異常處理邏輯 65
9.3 在迭代中處理異常的關(guān)鍵:誰是使用者 66
9.4 小結(jié) 68
第 10章 從迭代向生成器函數(shù)演進(jìn)的過程 69
10.1 將迭代過程代表的循環(huán)邏輯展開 70
10.2 用生成器函數(shù)對循環(huán)邏輯進(jìn)行二次重構(gòu) 71
10.3 由next()方法負(fù)責(zé)執(zhí)行引擎的喚起 73
10.4 為next()方法的傳入?yún)?shù)賦予新的意義 73
10.5 小結(jié) 74
第 11章 ECMAScript規(guī)范起步 75
11.1 第三行:返回結(jié)果 76
11.2 第二行:取引用的值 77
11.2.1 語句的執(zhí)行者 77
11.2.2 執(zhí)行期值的覆蓋與讀取 78
11.2.3 取引用值的具體方法 79
11.3 第 一行:從執(zhí)行到取結(jié)果的基礎(chǔ)模式 80
11.4 在ECMAScript中如何理解值1 80
11.5 小結(jié) 81
第三篇 從原型到類:向應(yīng)用編程語言的進(jìn)化
第 12章 詳解屬性及其性質(zhì) 84
12.1 JavaScript 1.0~1.3中的對象 85
12.1.1 面向?qū)ο蟮幕A(chǔ)設(shè)計與實(shí)現(xiàn) 85
12.1.2 屬性存取及其可見性問題 86
12.2 自有屬性與從原型中繼承來的屬性 87
12.3 字面量、標(biāo)識符與屬性 88
12.4 屬性存取的不確定性 88
12.5 小結(jié) 89
第 13章 從構(gòu)造器到類:創(chuàng)建對象的方法 90
13.1 JavaScript支持繼承的歷史 91
13.1.1 基于對象的JavaScript 91
13.1.2 類與構(gòu)造器 91
13.1.3 ES6之后的類 92
13.1.4 總結(jié) 93
13.2 兩種創(chuàng)建對象this的順序 94
13.3 改變對象創(chuàng)建的結(jié)果 95
13.4 小結(jié) 96
第 14章 從無到有:訪問父類的能力 97
14.1 面向?qū)ο笤缙谠O(shè)計中的概念抽象 98
14.2 為什么要有super 98
14.3 super指向什么 99
14.4 調(diào)用父類方法super.xxx() 100
14.4.1 super.xxx()中的this值 100
14.4.2 super()中的父類構(gòu)造方法 101
14.4.3 構(gòu)造方法在設(shè)計時面臨的選擇 102
14.5 訪問父類屬性super.xxx 102
14.6 小結(jié) 103
第 15章 實(shí)現(xiàn)用戶自定義的構(gòu)建過程 105
15.1 自定義構(gòu)建過程的必要性 106
15.1.1 關(guān)于隱式的構(gòu)造方法 106
15.1.2 非派生類不用調(diào)用super() 107
15.2 定制的構(gòu)造方法 108
15.3 定制構(gòu)造器能返回任意對象 109
15.4 小結(jié) 109
第 16章 數(shù)據(jù)結(jié)構(gòu)視角下的對象本質(zhì) 111
16.1 對象的前世今生 112
16.2 兩種數(shù)據(jù)結(jié)構(gòu) 113
16.3 結(jié)構(gòu)的反面:解構(gòu) 114
16.4 對象將兩種數(shù)據(jù)結(jié)構(gòu)合而為一 115
16.5 小結(jié) 117
第 17章 原子層級上的對象與行為 118
17.1 null值 119
17.2 Null類型 120
17.3 null是所有原子對象的父類實(shí)例 121
17.4 從繼承性的角度觀察原子對象 122
17.4.1 派生自原子的類 122
17.4.2 一般函數(shù)/構(gòu)造器 123
17.5 原子行為 124
17.6 小結(jié) 124
第四篇 從粗通到精通的進(jìn)階之路:唯一不變的是變化本身
第 18章 原始值:類型系統(tǒng)運(yùn)算的終極目標(biāo) 126
18.1 類型系統(tǒng)的簡化 127
18.1.1 從值到對象的類型轉(zhuǎn)換 127
18.1.2 對象可以轉(zhuǎn)換成哪些值 127
18.1.3 值與值之間的轉(zhuǎn)換 129
18.2 問題:將數(shù)組和對象相加會發(fā)生什么 130
18.3 分析:隱式轉(zhuǎn)換中的意圖推斷和轉(zhuǎn)換過程 131
18.3.1 返回值本身 131
18.3.2 返回內(nèi)部槽中的原始值 132
18.3.3 作為原始值處理 132
18.3.4 使用傳統(tǒng)的類型轉(zhuǎn)換邏輯 133
18.4 解題 133
18.4.1 從對象到原始值的轉(zhuǎn)換 133
18.4.2 加號運(yùn)算符的特殊性 134
18.4.3 字符串在加號運(yùn)算符中的優(yōu)先權(quán) 134
18.4.4 預(yù)期情況與非預(yù)期情況下的處理 135
18.5 Date特例的進(jìn)一步分析 136
18.6 小結(jié) 137
第 19章 JavaScript實(shí)現(xiàn)動態(tài)執(zhí)行時的基礎(chǔ)設(shè)施 138
19.1 eval執(zhí)行對傳入?yún)?shù)的理解 139
19.2 eval執(zhí)行對環(huán)境的要求 139
19.2.1 環(huán)境 140
19.2.2 執(zhí)行上下文 140
19.2.3 管理 141
19.2.4 不用于執(zhí)行的環(huán)境 142
19.2.5 eval()的環(huán)境 143
19.3 特殊的非嚴(yán)格模式的全局 144
19.4 小結(jié) 145
第 20章 非嚴(yán)格模式的全局環(huán)境中的動態(tài)執(zhí)行 146
20.1 在全局環(huán)境中的eval 147
20.2 名字之爭:對eval安全性的權(quán)衡 148
20.3 嚴(yán)格模式是執(zhí)行限制而不是環(huán)境屬性 149
20.4 直接調(diào)用與間接調(diào)用的對比 150
20.5 為什么本章標(biāo)題下的代碼是間接調(diào)用 151
20.6 eval()怎么返回結(jié)果 153
20.7 小結(jié) 154
第 21章 動態(tài)函數(shù)及其工作原理 155
21.1 動態(tài)創(chuàng)建函數(shù)的方法 156
21.1.1 得到函數(shù)的幾種途徑 156
21.1.2 幾種動態(tài)函數(shù)的構(gòu)造器 157
21.1.3 函數(shù)的3個組件 157
21.1.4 動態(tài)函數(shù)的創(chuàng)建過程 158
21.2 動態(tài)函數(shù)與其他函數(shù)的一致性 159
21.3 動態(tài)創(chuàng)建函數(shù)與間接調(diào)用eval()的唯一差異 159
21.4 小結(jié) 160
第五篇 從有序中抽離時間:并行的本質(zhì)不是有序而是重復(fù)
第 22章 Promise的精華:then鏈 162
22.1 早期JavaScript中的并行邏輯 163
22.2 從回調(diào)到Promise的then鏈 164
22.2.1 then鏈與其他主要概念之間的關(guān)系 164
22.2.2 并生體:從then鏈的本質(zhì)來理解時間剝離 165
22.3 then鏈的起始端:resolve()/reject()置值器 166
22.4 通過then鏈交付數(shù)據(jù) 168
22.4.1 p.then(f)中f的傳入值 168
22.4.2 p.then(f)中f的返回值 169
22.5 小結(jié) 170
第 23章 then鏈中的異數(shù):Thenable對象與類型模糊 171
23.1 Thenable是行為化的Promise 172
23.1.1 Thenable是通過特定界面向外界陳述自身值的對象 172
23.1.2 then方法需要有執(zhí)行回調(diào)的潛在能力 173
23.2 Thenable值的可變性及其影響 174
23.3 Thenable中then()的返回值 176
23.4 then()的主動喚起與被動喚起 177
23.5 Thenable的概念轉(zhuǎn)換與類型模糊 177
23.6 小結(jié) 178
第 24章 Promise類與子類 180
24.1 Promise類的應(yīng)用:以“Hello world”程序?yàn)槔?181
24.1.1 用三元組替代Promise的行為 181
24.1.2 執(zhí)行器中的其他邏輯 182
24.2 類上的原型方法:以異常處理為例 182
24.3 子類及其構(gòu)造方法的界面 184
24.3.1 定制執(zhí)行器邏輯及其返回 184
24.3.2 定制構(gòu)造方法的界面 185
24.4 小結(jié) 186
第 25章 精巧的設(shè)計:await/async 187
25.1 異步函數(shù)與異步上下文 188
25.1.1 異步上下文的獨(dú)特之處 188
25.1.2 異步在多次調(diào)用的不同表現(xiàn) 189
25.2 await上演的帽子魔法 190
25.2.1 執(zhí)行棧上的細(xì)節(jié)變化 190
25.2.2 處理數(shù)據(jù)x的詳細(xì)邏輯 191
25.3 async/await以及yield等特殊的名字 193
25.4 小結(jié) 195
第 26章 并發(fā)與多線程 196
26.1 ECMAScript中的線程并發(fā)模型 197
26.1.1 多線程并發(fā)執(zhí)行環(huán)境 197
26.1.2 資源爭用:并發(fā)執(zhí)行的核心沖突 198
26.2 工作線程及其調(diào)度 198
26.2.1 通知與數(shù)據(jù)交換 201
26.2.2 游離狀態(tài)與調(diào)度模型 201
26.2.3 現(xiàn)實(shí)環(huán)境 201
26.3 持鎖訪問 202
26.3.1 Atomics.wait()的細(xì)節(jié) 205
26.3.2 lock()方法的使用以及它存在的問題 206
26.3.3 資源規(guī)劃、競爭與死鎖 208
26.4 小結(jié) 210
第 27章 并發(fā)在分布式環(huán)境中的應(yīng)用 211
27.1 從無視時間到管理時間 211
27.2 靜態(tài)規(guī)劃的本質(zhì)是假設(shè)系統(tǒng)不受時間流逝的影響 212
27.2.1 需要基于一個可通信網(wǎng)絡(luò) 213
27.2.2 需要檢測資源狀態(tài) 214
27.2.3 需要帶預(yù)備過程的兩階段提交 215
27.2.4 用一對完整的“請求/響應(yīng)”來獲取資源 215
27.3 游離狀態(tài)在分布式系統(tǒng)中的問題 216
27.4 去中心化與分布式模型 217
27.5 小結(jié) 218
第六篇 致未來:新的語言特性
第 28章 動靜之間的平衡:import() 220
28.1 ES6模塊的主要問題 221
28.1.1 瀏覽器端的特殊性 221
28.1.2 服務(wù)器端的簡單需求 222
28.1.3 ES6規(guī)范的選擇 224
28.2 動態(tài)導(dǎo)入的模塊 224
28.2.1 語法查錯 225
28.2.2 決定時效性 226
28.3 import()的出現(xiàn) 226
28.4 瀏覽器生態(tài)下的動態(tài)導(dǎo)入 227
28.5 受ESM模塊影響的網(wǎng)頁腳本執(zhí)行順序 231
28.6 小結(jié) 232
第 29章 所有的組合:Promise.allSettled()和Promise.any() 233
29.1 組合的基本原則 234
29.1.1 通過組合來擴(kuò)展系統(tǒng)的外延 234
29.1.2 尋求合理的補(bǔ)充 235
29.1.3 少即是多的理念 238
29.2 更多組合、更多選擇 239
29.3 小結(jié) 241
第30章 與null的長期斗爭:從 .到 242
30.1 使用null和undefined的一些最佳實(shí)踐 243
30.2 空值檢測的一些預(yù)期性質(zhì) 245
30.3 問號的設(shè)計 246
30.3.1 短路運(yùn)算與 .運(yùn)算符的短路設(shè)計 246
30.3.2 是否存在一種新的語法設(shè)計風(fēng)格 248
30.3.3 JavaScript運(yùn)算符在設(shè)計上的限制 251
30.4 小結(jié) 252
第31章 塊的魔法:類強(qiáng)化過程中的那些方案 254
31.1 代碼的組織:形式分塊 255
31.1.1 信息隱蔽 255
31.1.2 結(jié)構(gòu)化 256
31.1.3 映射 256
31.1.4 在JavaScript中代碼分塊與作用域的關(guān)系 257
31.2 表達(dá)式級別的詞法作用域 257
31.3 圍繞類或?qū)ο蟮男畔㈦[蔽進(jìn)行的設(shè)計 260
31.3.1 字段:TC39對信息隱蔽的理解 261
31.3.2 塊:類構(gòu)造與實(shí)例構(gòu)造過程的組織與聯(lián)系 264
31.3.3 類的進(jìn)一步強(qiáng)化:塊化和注解化 266
31.4 有關(guān)作用域的兩點(diǎn)補(bǔ)充設(shè)計 268
31.5 小結(jié) 269
第32章 計算與應(yīng)用:數(shù)據(jù)類型設(shè)計上的強(qiáng)化或概念擴(kuò)展 271
32.1 JavaScript的內(nèi)建數(shù)據(jù)類型與標(biāo)準(zhǔn)庫 273
32.1.1 對象與標(biāo)準(zhǔn)庫 273
32.1.2 標(biāo)準(zhǔn)庫的結(jié)構(gòu) 273
32.1.3 強(qiáng)化標(biāo)準(zhǔn)庫的進(jìn)展 274
32.2 在基礎(chǔ)類型中對有序類型的進(jìn)一步設(shè)計 275
32.3 在內(nèi)存與線程相關(guān)技術(shù)中對應(yīng)用環(huán)境的更多考量 278
32.4 宿主行為規(guī)范 280
32.5 小結(jié) 283
第33章 最后的屏障:頂層await 285
33.1 模塊的狀態(tài) 286
33.2 模塊的頂層代碼 287
33.3 模塊頂層代碼中的await 288
33.4 瀏覽器環(huán)境下的異步 290
33.5 最后一塊落井石 291
33.6 小結(jié) 294
附錄A 22道測試題 295
附錄B 測試題答案及解析 299

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號