第 2 章 词法结构

源码先受字符集、注释、字面量、标识符和分号规则约束,再进入语法与执行;Unicode 规范化和自动分号插入会让视觉相似的文本产生不同程序。

本章定位

是本章的入口观察量。源码先受字符集、注释、字面量、标识符和分号规则约束,再进入语法与执行;Unicode 规范化和自动分号插入会让视觉相似的文本产生不同程序。 这意味着阅读不能停在 API 名称或最终打印值,而要回答:输入何时进入、值或对象怎样变化、控制权在哪里转移、错误如何传播、宿主资源由谁清理。

六阶段机制链

1. 读取 Unicode 源文本

固定源码、运行环境和输入,在动作发生前记录可见绑定、值类型、对象身份、待处理任务和已打开资源。若起点不稳定,后续比较没有意义。

2. 剔除注释并识别字面量

只执行本阶段最小动作,记录它读取了什么、写入了什么,以及控制权交给语言运行时还是浏览器、Node 或工具链。

3. 解析标识符与保留字

检查抽象规则是否被真正满足。不要用最终输出反推过程;对象引用、隐式转换、短路与异步调度都可能产生表面相同的结果。

4. 处理转义与规范化

在边界值、重复输入、迟到结果和错误宿主状态下重放。保存第一个与正常轨迹不同的位置,而不是只保存最后一条异常。

5. 判定语句边界

让失败沿规定通道传播,并核对调用者是否能区分可重试、应停止和必须降级的情况。静默吞错不能作为恢复策略。

6. 输出稳定 token 流

修复单一故障后重放完全相同的输入。只有绑定、值、任务、句柄和生成产物都回到可预测状态,本章才可以签发。

出版社目录逐项讲解

Chapter 2: Lexical Structure

Chapter 2: Lexical Structure 对应本章“读取 Unicode 源文本”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.1 The Text of a JavaScript Program

2.1 The Text of a JavaScript Program 对应本章“剔除注释并识别字面量”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.2 Comments

2.2 Comments 对应本章“解析标识符与保留字”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.3 Literals

2.3 Literals 对应本章“处理转义与规范化”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.4 Identifiers and Reserved Words

2.4 Identifiers and Reserved Words 对应本章“判定语句边界”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.4.1 Reserved Words

2.4.1 Reserved Words 对应本章“输出稳定 token 流”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.5 Unicode

2.5 Unicode 对应本章“读取 Unicode 源文本”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.5.1 Unicode Escape Sequences

2.5.1 Unicode Escape Sequences 对应本章“剔除注释并识别字面量”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.5.2 Unicode Normalization

2.5.2 Unicode Normalization 对应本章“解析标识符与保留字”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.6 Optional Semicolons

2.6 Optional Semicolons 对应本章“处理转义与规范化”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

2.7 Summary

2.7 Summary 对应本章“判定语句边界”观察点。先写出输入和值或资源的初始状态,再逐步记录执行后的类型、绑定、调用点、任务顺序或宿主结果。若边界样本与正常样本得到相同最终输出,也必须比较中间轨迹;只有首个偏离点、异常传播与恢复动作都能解释,才算掌握该目录项。

最小可运行实验

const café = "decomposed";
const café = "composed";
console.log(café.normalize("NFC") === café.normalize("NFC"));
book: JavaScript 权威指南(原书第 7 版)
page: jdg-02-lexical-structure
official_entries: 11
sample: normal | boundary | failure | recovery
first_divergence: null
values_explained: true
ordering_explained: true
cleanup_complete: true
freeze source + runtime + input
predict values + references + control flow + tasks
inject one controlled fault
stop at first divergence
recover and replay the same sample
assert stable state and no stale work

常见误区与故障注入

四类样本与验收

样本注入方式必查证据通过条件
正常规范输入与单次执行值、对象、调用点、任务、资源六阶段按预期完成
边界空值、极值、重复输入或慢 I/O类型边界与停止条件不发生隐式越界
失败错误参数、拒绝、断流或工具失败首个偏离点明确停止、传播或降级
恢复修复后重放完全相同输入清理后的状态与任务数无旧值、旧任务和旧资源

本页签发不变量是:源码先受字符集、注释、字面量、标识符和分号规则约束,再进入语法与执行;Unicode 规范化和自动分号插入会让视觉相似的文本产生不同程序。 单次输出、截图或一次测试通过不能替代值语义、控制流、对象身份、异步顺序和宿主资源的完整轨迹。

练习

小结

  • 字面量:对应“读取 Unicode 源文本”阶段的核心观察量。
  • 标识符:对应“剔除注释并识别字面量”阶段的核心观察量。
  • 保留字:对应“解析标识符与保留字”阶段的核心观察量。
  • Unicode:对应“处理转义与规范化”阶段的核心观察量。
  • 自动分号插入:对应“判定语句边界”阶段的核心观察量。
  • 11 个出版社目录条目已经全部映射到本章证据链。
  • 正常、边界、失败和恢复样本共同决定是否通过,最终输出不是唯一证据。

术语表

版本与改编边界

本单元以 David Flanagan 的英文第 7 版和李松峰译中文第 7 版为身份基线。目录来自 O’Reilly 出版社公开页面,正文是独立教学重构,不复制原书段落;工具版本、浏览器能力和 Node API 的现状需另行按当前官方文档核验。

讨论

评论区加载中…