esLint里no-case-declarations的意义在哪

官网的解释:The reason is that the lexical declaration is visible in the entire switch block but it only gets initialized when it is assigned, which will only happen if the case where it is defined is reached.
没怎么看懂

阅读 12.2k
1 个回答

有中文网站 no-case-declarations

该规则禁止词法声明 (letconstfunctionclass) 出现在 casedefault 子句中。原因是,词法声明在整个 switch 语句块中是可见的,但是它只有在运行到它定义的 case 语句时,才会进行初始化操作。

为了保证词法声明语句只在当前 case 语句中有效,将你子句包裹在块中。

该规则旨在避免访问未经初始化的词法绑定以及跨 case 语句访问被提升的函数。

switch (foo) {
    case 1:
        let x = 1;
        break;
    case 2:
        const y = 2;
        break;
    case 3:
        function f() {}
        break;
    default:
        class C {}
}

大概是指上面case 1里的xcase 2里也会生效,所以要用{}包起来,防止x提升到整个switch语句。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏