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

JavaScript使用数组解构交换变量报Cannot access 'y' before initialization错如何解决

报错原因

这个问题是JavaScript自动分号插入(ASI)规则的解析异常导致的:
你写的let y = 'john'行末尾没有手动添加分号,JS解析器判定当前行和下一行代码可以合并解析,不会自动在该行末尾补充分号,会把下一行开头的[x, y]和前一行代码拼接,最终实际解析的代码为:

let y = 'john'[x, y] = [y, x]

这就导致y还处于声明后的初始化流程中时,就被提前访问了,因此抛出Cannot access 'y' before initialization(无法在y初始化前访问该变量)的错误。

解决方法

有两种常用的修复方案:

  • 方案一:养成手动写分号的习惯,在所有语句末尾添加分号,阻断解析器的错误拼接
    修复后代码:
    let x = 'bob';
    let y = 'john';
    
    [x, y] = [y, x];
    
    console.log(x, y);
    
  • 方案二:如果你的团队代码规范要求不写分号,只需要在所有以[、(、/、+、-开头的行首手动添加一个分号即可
    修复后代码:
    let x = 'bob'
    let y = 'john'
    
    ;[x, y] = [y, x]
    
    console.log(x, y)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:30:04