第 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: true
freeze 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 的当前状态需另行按各自官方文档核验。

讨论

评论区加载中…