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

使用数组解构在JavaScript中交换数字时遇初始化错误求助

解构交换变量触发ReferenceError的原因及解决办法

你的代码如下:

let a=5
let b=10

//a,b=b,a
[a,b]=[b,a];
console.log(a,b);

触发的错误:

ReferenceError: Cannot access 'b' before initialization
at Object. (C:\javascript\Telusko\swap.js:5:4)

错误原因

这是JavaScript**自动分号插入(ASI)**机制导致的解析错误。JS引擎不会在所有换行处自动添加分号,当你在let b=10后不加分号,紧接着下一行以[开头时,引擎会把两行代码合并解析为:

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

这里10[a,b]会先执行逗号运算符a,b(结果为b),再尝试访问10[b],但此时变量b还处于初始化阶段,因此触发了"Cannot access 'b' before initialization"的错误。

解决办法

有两种简单的修复方式:

  • 给前面的变量声明语句添加分号:
let a=5;
let b=10;

[a,b]=[b,a];
console.log(a,b); // 输出 10 5
  • 在解构赋值语句的开头添加分号,强制引擎将其视为独立语句:
let a=5
let b=10

;[a,b]=[b,a];
console.log(a,b); // 输出 10 5

内容的提问来源于stack exchange,提问作者Srinivas Kurumalla

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:06:32