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
相关产品推荐
相关产品推荐

