第 2 章 变量、表达式与语句
程序先把值绑定到变量,再由表达式产生新值,最后由语句组织执行顺序;作用域、类型转换、优先级和控制流必须在每一步显式可解释。
直觉起点
、、、、共同构成本页的观察坐标。程序先把值绑定到变量,再由表达式产生新值,最后由语句组织执行顺序;作用域、类型转换、优先级和控制流必须在每一步显式可解释。 这意味着学习不能停在 API 名称和最终截图,而要回答:值在何处产生,对象由谁持有,控制权何时转交宿主,错误怎样返回,监听器、定时器、请求、响应和数据库连接由谁清理。
六阶段机制链
1. 创建脚本入口
固定源码、运行环境、输入与初始状态,先预测值、对象身份、调用点、任务队列和宿主资源。不要从最终输出反推过程;一旦出现分歧,保存首个偏离点再继续。
2. 标注意图和约束
只执行当前最小动作,记录值、对象身份、调用点、任务队列和宿主资源。不要从最终输出反推过程;一旦出现分歧,保存首个偏离点再继续。
3. 建立变量绑定
只执行当前最小动作,记录值、对象身份、调用点、任务队列和宿主资源。不要从最终输出反推过程;一旦出现分歧,保存首个偏离点再继续。
4. 计算表达式
只执行当前最小动作,记录值、对象身份、调用点、任务队列和宿主资源。不要从最终输出反推过程;一旦出现分歧,保存首个偏离点再继续。
5. 选择或重复语句
只执行当前最小动作,记录值、对象身份、调用点、任务队列和宿主资源。不要从最终输出反推过程;一旦出现分歧,保存首个偏离点再继续。
6. 用练习验证边界
只执行当前最小动作,记录值、对象身份、调用点、任务队列和宿主资源。恢复后必须用完全相同的输入重放,并确认所有状态可预测、所有资源有明确归属。
边界记录模板
每次实验都建立一行六列证据:输入快照、当前阶段、语言状态、宿主资源、首个偏离点、恢复结果。语言核心章节要展开变量绑定、对象身份和调用栈;浏览器章节要增加节点连接状态、事件监听数量、网络请求与页面地址;Node.js 章节要增加请求流、响应是否结束、文件或数据库连接和事务状态。执行“创建脚本入口”前先写预测,经过“建立变量绑定”后只比较一项受控变化,到“用练习验证边界”时重放同一输入。若最终值相同但对象、任务、监听器、流或连接数量不同,仍判定失败;若异常被捕获但部分状态已经提交,也不能签发。这个模板把 API 记忆转换成可复查的因果链,并让正常、边界、失败和恢复样本可以逐列对照。
公开目录逐项讲解
第 2 章 变量、表达式与语句
第 2 章 变量、表达式与语句 的核心是:从值的保存、计算到控制执行建立最小程序模型,所有后续抽象都依赖这条链。先预测正常输入经过“创建脚本入口”时会读取和修改哪些值,再运行最小样例,保存“变量绑定”的实际状态。边界样本必须覆盖空值、重复输入、非法格式或迟到结果;失败样本只注入一个变量,并停在首个偏离点。最后清除故障、重放同一输入,确认输出、任务、监听器、连接和持久化状态都已收敛。
2.1 第一个 JavaScript 程序
2.1 第一个 JavaScript 程序 的核心是:固定输入、输出和运行命令,让最小程序同时能在控制台观察值与异常。先预测正常输入经过“标注意图和约束”时会读取和修改哪些值,再运行最小样例,保存“表达式”的实际状态。边界样本必须覆盖空值、重复输入、非法格式或迟到结果;失败样本只注入一个变量,并停在首个偏离点。最后清除故障、重放同一输入,确认输出、任务、监听器、连接和持久化状态都已收敛。
2.2 为代码编写注释
2.2 为代码编写注释 的核心是:用注释记录为什么存在约束与边界,而不是逐字复述显而易见的语句。先预测正常输入经过“建立变量绑定”时会读取和修改哪些值,再运行最小样例,保存“操作符”的实际状态。边界样本必须覆盖空值、重复输入、非法格式或迟到结果;失败样本只注入一个变量,并停在首个偏离点。最后清除故障、重放同一输入,确认输出、任务、监听器、连接和持久化状态都已收敛。
2.3 变量与操作符
2.3 变量与操作符 的核心是:比较 const、let 与历史 var 的作用域,跟踪算术、比较、逻辑操作中的显式和隐式转换。先预测正常输入经过“计算表达式”时会读取和修改哪些值,再运行最小样例,保存“控制流”的实际状态。边界样本必须覆盖空值、重复输入、非法格式或迟到结果;失败样本只注入一个变量,并停在首个偏离点。最后清除故障、重放同一输入,确认输出、任务、监听器、连接和持久化状态都已收敛。
2.4 表达式与语句
2.4 表达式与语句 的核心是:区分产生值的表达式和组织控制流的语句,并按优先级、短路和循环退出条件推演轨迹。先预测正常输入经过“选择或重复语句”时会读取和修改哪些值,再运行最小样例,保存“词法作用域”的实际状态。边界样本必须覆盖空值、重复输入、非法格式或迟到结果;失败样本只注入一个变量,并停在首个偏离点。最后清除故障、重放同一输入,确认输出、任务、监听器、连接和持久化状态都已收敛。
2.5 综合练习
2.5 综合练习 的核心是:把输入校验、累计、分支和输出组合成可重放程序,用空数组、非法值与边界值验收。先预测正常输入经过“用练习验证边界”时会读取和修改哪些值,再运行最小样例,保存“变量绑定”的实际状态。边界样本必须覆盖空值、重复输入、非法格式或迟到结果;失败样本只注入一个变量,并停在首个偏离点。最后清除故障、重放同一输入,确认输出、任务、监听器、连接和持久化状态都已收敛。
本章小结
本章小结 的核心是:以绑定表和控制流轨迹复盘变量、表达式、语句三层关系。先预测正常输入经过“创建脚本入口”时会读取和修改哪些值,再运行最小样例,保存“表达式”的实际状态。边界样本必须覆盖空值、重复输入、非法格式或迟到结果;失败样本只注入一个变量,并停在首个偏离点。最后清除故障、重放同一输入,确认输出、任务、监听器、连接和持久化状态都已收敛。
最小可运行实验
const prices = [19, 8, 27, 12];
let total = 0;
for (const price of prices) {
if (!Number.isFinite(price) || price < 0) continue;
total += price;
}
console.log({ total, average: total / prices.length });book: JavaScript 全栈开发
page: jfs-02-variables-expressions-statements
public_toc_entries: 7
sample: normal | boundary | failure | recovery
first_divergence: null
language_state_explained: true
host_resources_explained: true
cleanup_complete: truefreeze source + runtime + input
predict language values + host effects
inject exactly one controlled fault
stop at the first divergence
recover and replay the same input
assert stable state and no stale resources常见误区与故障注入
四类样本与验收
| 样本 | 注入方式 | 必查证据 | 通过条件 |
|---|---|---|---|
| 正常 | 合法输入与单次执行 | 值、对象、调用点、任务、宿主资源 | 六阶段按预期完成 |
| 边界 | 空值、极值、重复输入、慢 I/O | 类型与协议边界、停止条件 | 不发生隐式越界或重复提交 |
| 失败 | 错误参数、拒绝、断流、数据库失败 | 首个偏离点与错误通道 | 明确停止、传播或回滚 |
| 恢复 | 清除故障后重放相同输入 | 清理后的状态与资源数 | 无旧任务、监听器、流和连接 |
本页签发不变量是:程序先把值绑定到变量,再由表达式产生新值,最后由语句组织执行顺序;作用域、类型转换、优先级和控制流必须在每一步显式可解释。 单次输出、截图或一次请求成功不能替代值语义、对象身份、控制流、任务顺序和宿主资源的完整轨迹。
练习
小结
- 变量绑定:对应“创建脚本入口”阶段的核心观察量。
- 表达式:对应“标注意图和约束”阶段的核心观察量。
- 操作符:对应“建立变量绑定”阶段的核心观察量。
- 控制流:对应“计算表达式”阶段的核心观察量。
- 词法作用域:对应“选择或重复语句”阶段的核心观察量。
- 7 个公开目录条目已经全部映射到本页证据链。
- 正常、边界、失败和恢复样本共同决定是否通过,最终输出不是唯一证据。
术语表
版本与改编边界
本单元以凌杰著《JavaScript 全栈开发》为身份基线。公开目录来自人民邮电出版社出版电子版页面,创作原则由作者出版说明交叉确认;正文是独立教学重构,不复制原书段落。浏览器、Node.js 和数据库 API 的当前状态需另行按各自官方文档核验。