使用数组解构在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
相关产品推荐
相关产品推荐

