,

变量名为什么都不能以数字开头

编译器 / 解释器无法区分「数字」和「变量名」,语法歧义 举个例子: 解析器读到 123abc 时,第一反应:…

编译器 / 解释器无法区分「数字」和「变量名」,语法歧义

举个例子:

// 假设允许数字开头变量
let 123abc = 10;
console.log(123abc);

解析器读到 123abc 时,第一反应:

123 是数字字面量,后面跟 abc,会识别成 123 * abc,直接报语法错误。

再看表达式歧义:

let 5a = 20;
5a + 3

引擎分不清:是变量 5a,还是 5 * a

词法分析规则(根本逻辑)

编程语言词法扫描分两类 token:

  1. 数字常量:以 0-9 开头,后续只能是数字、小数点、指数符号;
  2. 标识符(变量 / 函数名):必须以字母、下划线 _、美元符 $ 开头,后面才能跟数字。

规则强制分割两类 token,消除歧义,简化语法解析器设计。

额外历史与可读性设计原因

  1. 数学习惯 数学里数字永远写在变量前面:3x 代表 3 × x,语言遵循人类阅读习惯;
  2. 可读性约束 user99 一眼看懂:用户编号 99; 99user 视觉混乱,不利于代码阅读;
  3. 正则匹配简化 解析器匹配标识符正则:^[a-zA-Z_$][a-zA-Z0-9_$]* 只要首字符限定非数字,正则不用复杂回溯,提升编译速度。

Previous Post

Next Post

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About the Author

每个人都有自己得时区,在自己得时区里,一切都是准时的。

BlockSpare — News, Magazine and Blog Addons for (Gutenberg) Block Editor