官网的解释: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. 没怎么看懂
森栏
浏览 2192回答 1
1回答
沧海一幻觉
有中文网站 no-case-declarations该规则禁止词法声明 (let、const、function 和 class) 出现在 case或default 子句中。原因是,词法声明在整个 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里的x在case 2里也会生效,所以要用{}包起来,防止x提升到整个switch语句。