解决 Unexpected lexical declaration in case block 的问题

使用新版的 es-lint 的时候扫描旧的项目,发现报了

Unexpected lexical declaration in case block(no-case-declarations)

这么一个错误提示

当时很奇怪,就去查了一下文档,发现中文文档中解释比较简单

该规则禁止词法声明 (let、const、function 和 class) 出现在 case或default 子句中。

no-case-declarations - Rules - ESLint中文

几番实验后,其实归根结底是代码作用域的问题:

switch (2) {

case 1:

function f () {console.log('Wanna a girl friend !')}

break

case 2:

f() // 会输出:Wanna a girl friend !

break

}

switch (1) {

case 1:

let foo = 1

break

case 2:

let foo = 2

console.log(foo) // 会报错:Uncaught SyntaxError: Identifier 'foo' has already been declared

break

}

如上实验可知,就算switch 逻辑没有走到 case 1 的代码块,由于作用域提升,会导致case 1 影响到case 2

所以,eslint 会对这种情况做校验,现在必须 使用花括号将代码块确定具体的作用域

switch (1) {

case 1: {

// do something

break

}

}

从而限制上述问题的发生

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值