您好,欢迎来到聚文网。
登录
免费注册
网站首页
|
搜索
热搜:
磁力片
|
漫画
|
购物车
0
我的订单
商品分类
首页
幼儿
文学
社科
教辅
生活
销量榜
JavaScript核心原理 规范、逻辑与设计
字数: 498000
装帧: 平装
出版社: 人民邮电出版社
作者: 周爱民
出版日期: 2023-07-01
商品条码: 9787115608925
版次: 1
开本: 16开
页数: 336
出版年份: 2023
定价:
¥99.8
销售价:
登录后查看价格
¥{{selectedSku?.salePrice}}
库存:
{{selectedSku?.stock}}
库存充足
{{item.title}}:
{{its.name}}
加入购物车
立即购买
加入书单
收藏
精选
¥5.83
世界图书名著昆虫记绿野仙踪木偶奇遇记儿童书籍彩图注音版
¥5.39
正版世界名著文学小说名家名译中学生课外阅读书籍图书批发 70册
¥8.58
简笔画10000例加厚版2-6岁幼儿童涂色本涂鸦本绘画本填色书正版
¥5.83
世界文学名著全49册中小学生青少年课外书籍文学小说批发正版
¥4.95
全优冲刺100分测试卷一二三四五六年级上下册语文数学英语模拟卷
¥8.69
父与子彩图注音完整版小学生图书批发儿童课外阅读书籍正版1册
¥24.2
好玩的洞洞拉拉书0-3岁宝宝早教益智游戏书机关立体翻翻书4册
¥7.15
幼儿认字识字大王3000字幼儿园中班大班学前班宝宝早教启蒙书
¥11.55
用思维导图读懂儿童心理学培养情绪管理与性格培养故事指导书
¥19.8
少年读漫画鬼谷子全6册在漫画中学国学小学生课外阅读书籍正版
¥64
科学真好玩
¥12.7
一年级下4册·读读童谣和儿歌
¥38.4
原生态新生代(传统木版年画的当代传承国际研讨会论文集)
¥11.14
法国经典中篇小说
¥11.32
上海的狐步舞--穆时英(中国现代文学馆馆藏初版本经典)
¥21.56
猫的摇篮(精)
¥30.72
幼儿园特色课程实施方案/幼儿园生命成长启蒙教育课程丛书
¥24.94
旧时风物(精)
¥12.04
三希堂三帖/墨林珍赏
¥6.88
寒山子庞居士诗帖/墨林珍赏
¥6.88
苕溪帖/墨林珍赏
¥6.88
楷书王维诗卷/墨林珍赏
¥9.46
兰亭序/墨林珍赏
¥7.74
祭侄文稿/墨林珍赏
¥7.74
蜀素帖/墨林珍赏
¥12.04
真草千字文/墨林珍赏
¥114.4
进宴仪轨(精)/中国古代舞乐域外图书
¥24.94
舞蹈音乐的基础理论与应用
编辑推荐
1.细致讲解核心知识点。借由ECMAScript规范的设计来讨论JavaScript核心的语言特性的演进与发展,并瞻见这门语言的未来。 2.详细介绍JavaScript语言。探索“JavaScript语言为什么这样设计”,以及“这样的设计对写代码有什么影响”,讲解JavaScript的执行现场和可执行结构,揭开执行系统的面纱。 3.以通俗易懂的方式呈现JavaScript的动态语言特性,揭示所谓“严格模式”在全局环境中的部分真相。
内容简介
本书以解析JavaScript语言的核心原理为主要目标,深入分析JavaScript语言的核心语言概念和语言范式中的主要知识点。本书重在分析JavaScript语言的各种语言特性及其演化历程,并试图通过这个分析过程梳理出JavaScript 语言的发展脉络,以帮助读者构建语言学习的完整知识体系。本书也是一本ECMAScript入门手册,讲解ECMAScript的关键概念、规范类型和内部过程,并独到而深入地解析语言的执行机制和设计原则。尤其难得的是,本书还介绍了大量处于早期阶段的规范提案,引领读者回顾这些提案的设计历程,并展望和探索相关的技术。
本书适合有一定编程基础的JavaScript开发人员与深度爱好者阅读。
作者简介
周爱民,国内软件开发界资深架构师、软件工程师。有20余年的软件开发与架构、项目管理、团队建设的经验,曾任盛大网络平台架构师、支付业务架构师、豌豆英架构师和上海南潮架构师等职。从1998年开始了解并应用JavaScript,著有前端“绿皮书”《JavaScript语言精髓与编程实践》,曾发布Qomo、 QoBean及分布式架构框架N4C等开源项目。已出版的其他作品有《大道至简》 《大道至易》和《Delphi源代码分析》。
目录
第一篇从零开始:重新认识JavaScript语言的基础概念
第1章生存周期:JavaScript变量与引用的销毁2
1.1习惯中用“引用”来区别数据类型的操作方式3
1.1.1删除运算到底在试图销毁什么4
1.1.2表达式的结果是什么4
1.2深入理解“引用(规范类型)”5
1.3引用在引擎内部的主要行为6
1.4从引用的发现到销毁6
1.5小结7
第2章赋值:赋值过程中出现变量泄露的原因9
2.1从变量声明到赋值绑定的全程解析10
2.1.1赋值在语言设计中称为绑定11
2.1.2用赋值语法实现绑定导致的问题12
2.2变量泄露:向一个不存在的变量赋值12
2.3在连续赋值过程中发生的行为细节14
2.4在应用中使用“赋值语句魔法”的技巧15
2.5小结16
第3章表达式:对运算过程的观察与分析17
3.1在运算过程中丢失的数据的难解之谜18
3.1.1深度解析声明语句与赋值表达式的语义差别18
3.1.2来自《JavaScript权威指南》的解释19
3.2表达式连续运算过程中的变量、值与引用20
3.3用代码重现引用覆盖的现场21
3.4技术的取巧之处22
3.5小结23
第4章名字与导出:“有名字”是构建逻辑的基础24
4.1能导出的只有名字和值25
4.1.1代码就是文本25
4.1.2详解export的语法与语义25
4.2export导出名字的具体逻辑27
4.2.1导出:同化名字与值的处理逻辑27
4.2.2绑定:通过执行顶层代码实现的装配过程28
4.2.3问题:函数表达式执行中不绑定名字28
4.3匿名函数定义及其名字处理29
4.4有关导出语句的一些补充30
4.5小结31
第5章作用域:循环计算成本高昂的原因32
5.1代码分块与块级作用域33
5.2循环语句中的块34
5.2.1特例35
5.2.2特例中的特例35
5.3第二个作用域的必要性36
5.4for循环在运行时需要更多作用域37
5.5小结38
第二篇从表达式到执行引擎:运行代码的核心机制
第6章执行环境的秘密:语句的运行与完成的视角40
6.1用中断代替跳转41
6.1.1跳转到语句结束的位置41
6.1.2跳转到标签约定的位置42
6.2执行现场的回收43
6.3语句执行的意义44
6.4中断语句的特殊性45
6.4.1最小化的break语句46
6.4.2返回empty的语句46
6.5小结46
第7章深入探索JavaScript中的特殊执行体47
7.1抽象确定逻辑的执行体48
7.2几种特殊的可执行结构48
7.2.1参数表48
7.2.2扩展风格的参数表49
7.2.3赋值模式50
7.3模板字面量52
7.4小结53
第8章闭包、函数与函数式编程语言的关系54
8.1函数的一体两面55
8.1.1在运行期一个实例有多个闭包55
8.1.2闭包用于承载两个语义组件56
8.2简单参数类型57
8.2.1传入参数的处理57
8.2.2意外58
8.2.3未初始化绑定58
8.3最小化的函数式编程语言示例59
8.4小结60
第9章迭代过程及其出错处理机制61
9.1递归与迭代62
9.1.1迭代对执行过程的重造和使用63
9.1.2展开语法63
9.2JavaScript中如何实现迭代处理64
9.2.1内部迭代过程64
9.2.2不可思议的异常处理逻辑65
9.3在迭代中处理异常的关键:谁是使用者66
9.4小结68
第10章从迭代向生成器函数演进的过程69
10.1将迭代过程代表的循环逻辑展开70
10.2用生成器函数对循环逻辑进行二次重构71
10.3由next()方法负责执行引擎的唤起73
10.4为next()方法的传入参数赋予新的意义73
10.5小结74
第11章ECMAScript规范起步75
11.1第三行:返回结果76
11.2第二行:取引用的值77
11.2.1语句的执行者77
11.2.2执行期值的覆盖与读取78
11.2.3取引用值的具体方法79
11.3第一行:从执行到取结果的基础模式80
11.4在ECMAScript中如何理解值180
11.5小结81
第三篇从原型到类:向应用编程语言的进化
第12章详解属性及其性质84
12.1JavaScript1.0~1.3中的对象85
12.1.1面向对象的基础设计与实现85
12.1.2属性存取及其可见性问题86
12.2自有属性与从原型中继承来的属性87
12.3字面量、标识符与属性88
12.4属性存取的不确定性88
12.5小结89
第13章从构造器到类:创建对象的方法90
13.1JavaScript支持继承的历史91
13.1.1基于对象的JavaScript91
13.1.2类与构造器91
13.1.3ES6之后的类92
13.1.4总结93
13.2两种创建对象this的顺序94
13.3改变对象创建的结果95
13.4小结96
第14章从无到有:访问父类的能力97
14.1面向对象早期设计中的概念抽象98
14.2为什么要有super98
14.3super指向什么99
14.4调用父类方法super.xxx()100
14.4.1super.xxx()中的this值100
14.4.2super()中的父类构造方法101
14.4.3构造方法在设计时面临的选择102
14.5访问父类属性super.xxx102
14.6小结103
第15章实现用户自定义的构建过程105
15.1自定义构建过程的必要性106
15.1.1关于隐式的构造方法106
15.1.2非派生类不用调用super()107
15.2定制的构造方法108
15.3定制构造器能返回任意对象109
15.4小结109
第16章数据结构视角下的对象本质111
16.1对象的前世今生112
16.2两种数据结构113
16.3结构的反面:解构114
16.4对象将两种数据结构合而为一115
16.5小结117
第17章原子层级上的对象与行为118
17.1null值119
17.2Null类型120
17.3null是所有原子对象的父类实例121
17.4从继承性的角度观察原子对象122
17.4.1派生自原子的类122
17.4.2一般函数/构造器123
17.5原子行为124
17.6小结124
第四篇从粗通到精通的进阶之路:专享不变的是变化本身
第18章原始值:类型系统运算的终极目标126
18.1类型系统的简化127
18.1.1从值到对象的类型转换127
18.1.2对象可以转换成哪些值127
18.1.3值与值之间的转换129
18.2问题:将数组和对象相加会发生什么130
18.3分析:隐式转换中的意图推断和转换过程131
18.3.1返回值本身131
18.3.2返回内部槽中的原始值132
18.3.3作为原始值处理132
18.3.4使用传统的类型转换逻辑133
18.4解题133
18.4.1从对象到原始值的转换133
18.4.2加号运算符的特殊性134
18.4.3字符串在加号运算符中的优先权134
18.4.4预期情况与非预期情况下的处理135
18.5Date特例的进一步分析136
18.6小结137
第19章JavaScript实现动态执行时的基础设施138
19.1eval执行对传入参数的理解139
19.2eval执行对环境的要求139
19.2.1环境140
19.2.2执行上下文140
19.2.3管理141
19.2.4不用于执行的环境142
19.2.5eval()的环境143
19.3特殊的非严格模式的全局144
19.4小结145
第20章非严格模式的全局环境中的动态执行146
20.1在全局环境中的eval147
20.2名字之争:对eval安全性的权衡148
20.3严格模式是执行而不是环境属性149
20.4直接调用与间接调用的对比150
20.5为什么本章标题下的代码是间接调用151
20.6eval()怎么返回结果153
20.7小结154
第21章动态函数及其工作原理155
21.1动态创建函数的方法156
21.1.1得到函数的几种途径156
21.1.2几种动态函数的构造器157
21.1.3函数的3个组件157
21.1.4动态函数的创建过程158
21.2动态函数与其他函数的一致性159
21.3动态创建函数与间接调用eval()的专享差异159
21.4小结160
第五篇从有序中抽离时间:并行的本质不是有序而是重复
第22章Promise的精华:then链162
22.1早期JavaScript中的并行逻辑163
22.2从回调到Promise的then链164
22.2.1then链与其他主要概念之间的关系164
22.2.2并生体:从then链的本质来理解时间剥离165
22.3then链的起始端:resolve()/reject()置值器166
22.4通过then链交付数据168
22.4.1p.then(f)中f的传入值168
22.4.2p.then(f)中f的返回值169
22.5小结170
第23章then链中的异数:Thenable对象与类型模糊171
23.1Thenable是行为化的Promise172
23.1.1Thenable是通过特定界面向外界陈述自身值的对象172
23.1.2then方法需要有执行回调的潜在能力173
23.2Thenable值的可变性及其影响174
23.3Thenable中then()的返回值176
23.4then()的主动唤起与被动唤起177
23.5Thenable的概念转换与类型模糊177
23.6小结178
第24章Promise类与子类180
24.1Promise类的应用:以“Helloworld”程序为例181
24.1.1用三元组替代Promise的行为181
24.1.2执行器中的其他逻辑182
24.2类上的原型方法:以异常处理为例182
24.3子类及其构造方法的界面184
24.3.1定制执行器逻辑及其返回184
24.3.2定制构造方法的界面185
24.4小结186
第25章精巧的设计:await/async187
25.1异步函数与异步上下文188
25.1.1异步上下文的独特之处188
25.1.2异步在多次调用的不同表现189
25.2await上演的帽子魔法190
25.2.1执行栈上的细节变化190
25.2.2处理数据x的详细逻辑191
25.3async/await以及yield等特殊的名字193
25.4小结195
第26章并发与多线程196
26.1ECMAScript中的线程并发模型197
26.1.1多线程并发执行环境197
26.1.2资源争用:并发执行的核心冲突198
26.2工作线程及其调度198
26.2.1通知与数据交换201
26.2.2游离状态与调度模型201
26.2.3现实环境201
26.3持锁访问202
26.3.1Atomics.wait()的细节205
26.3.2lock()方法的使用以及它存在的问题206
26.3.3资源规划、竞争与死锁208
26.4小结210
第27章并发在分布式环境中的应用211
27.1从无视时间到管理时间211
27.2静态规划的本质是假设系统不受时间流逝的影响212
27.2.1需要基于一个可通信网络213
27.2.2需要检测资源状态214
27.2.3需要带预备过程的两阶段提交215
27.2.4用一对完整的“请求/响应”来获取资源215
27.3游离状态在分布式系统中的问题216
27.4去中心化与分布式模型217
27.5小结218
第六篇致未来:新的语言特性
第28章动静之间的平衡:import()220
28.1ES6模块的主要问题221
28.1.1浏览器端的特殊性221
28.1.2服务器端的简单需求222
28.1.3ES6规范的选择224
28.2动态导入的模块224
28.2.1语法查错225
28.2.2决定时效性226
28.3import()的出现226
28.4浏览器生态下的动态导入227
28.5受ESM模块影响的网页脚本执行顺序231
28.6小结232
第29章所有的组合:Promise.allSettled()和Promise.any()233
29.1组合的基本原则234
29.1.1通过组合来扩展系统的外延234
29.1.2寻求合理的补充235
29.1.3少即是多的理念238
29.2更多组合、更多选择239
29.3小结241
第30章与null的长期斗争:从.到242
30.1使用null和undefined的一些很好实践243
30.2空值检测的一些预期性质245
30.3问号的设计246
30.3.1短路运算与.运算符的短路设计246
30.3.2是否存在一种新的语法设计风格248
30.3.3JavaScript运算符在设计上的251
30.4小结252
第31章块的魔法:类强化过程中的那些方案254
31.1代码的组织:形式分块255
31.1.1信息隐蔽255
31.1.2结构化256
31.1.3映射256
31.1.4在JavaScript中代码分块与作用域的关系257
31.2表达式级别的词法作用域257
31.3围绕类或对象的信息隐蔽进行的设计260
31.3.1字段:TC39对信息隐蔽的理解261
31.3.2块:类构造与实例构造过程的组织与联系264
31.3.3类的进一步强化:块化和注解化266
31.4有关作用域的两点补充设计268
31.5小结269
第32章计算与应用:数据类型设计上的强化或概念扩展271
32.1JavaScript的内建数据类型与标准库273
32.1.1对象与标准库273
32.1.2标准库的结构273
32.1.3强化标准库的进展274
32.2在基础类型中对有序类型的进一步设计275
32.3在内存与线程相关技术中对应用环境的更多考量278
32.4宿主行为规范280
32.5小结283
第33章最后的屏障:顶层await285
33.1模块的状态286
33.2模块的顶层代码287
33.3模块顶层代码中的await288
33.4浏览器环境下的异步290
33.5最后一块落井石291
33.6小结294
附录A22道测试题295
附录B测试题答案及解析299
×
Close
添加到书单
加载中...
点此新建书单
×
Close
新建书单
标题:
简介:
蜀ICP备2024047804号
Copyright 版权所有 © jvwen.com 聚文网