You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么该场景下JavaScript缺少分号会抛出ReferenceError错误?

报错根因

这个问题是JavaScript的自动分号插入(ASI, Automatic Semicolon Insertion) 规则未按预期工作导致的。

当你没有在let b = 10末尾手动添加分号时,JS解析器会将下一行开头的方括号和上一行的内容拼接,最终代码会被解析为:

let a = 5
let b = 10[a, b] = [b, a];

此时JS会把10[a, b]识别为对数字10的属性访问操作:先计算方括号内的逗号表达式a, b,逗号表达式的返回值为最后一个项的值也就是b,但此时b的声明赋值流程还没完成(整行let b = 10[a, b] = [b, a]还处于解析赋值阶段,b仍在暂时性死区内),所以会抛出b is not defined的引用错误。

补充说明

  • 这也是多数前端编码规范强制要求行尾加分号的核心原因之一,可以完全规避ASI的异常解析问题
  • 如果你偏好不写分号的编码风格,需要注意所有以(、[、`、+、-开头的行,必须在行首补一个分号避免和上一行拼接解析,你的代码也可以改成如下写法正常运行:
let a = 5
let b = 10
;[a, b] = [b, a]
console.log(a, b)

内容的提问来源于stack exchange,提问作者Ezio Shiki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:54:00