解决 Unexpected lexical declaration in case block 的问题

本文介绍了在使用ESLint新版本时遇到的`no-case-declarations`错误,该错误源于在switch语句的case或default子句中使用了词法声明。通过示例代码,作者解释了这实际上是代码作用域问题,即使case块未被执行,其内的变量仍可能影响其他case。为避免此问题,ESLint建议使用花括号明确代码块的作用域。这个规则有助于防止因作用域不当导致的意外行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

亲测可用,若有疑问请私信

使用新版的 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
  }
}

从而限制上述问题的发生

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值