为什么 switch 语句只有一个底层块?

Why is a switch statement only one underlying block?

我很高兴 JavaScript 有新的 let statement 来声明块作用域局部变量。但是,在 switch 语句中声明 let 变量时似乎存在类型错误,这将是使用 let.

非常有用的场景
function test(x) { 
  'use strict';
  switch (x) {
    case 0:
      let foo;
      break;

    case 1:
      let foo; // TypeError for redeclaration.
      break;
  }
}

果然,MDN 显示了这个例子:

You may encounter errors in switch statements because there is only one underlying block.

那么为什么一个 switch 语句只有一个底层块?

基本上归结为开关的工作方式,其语法表示它只有一对 {}

因为您可能会因错过 break 而从一种情况跌落到另一种情况 - 在这种情况下,您会希望拥有相同的范围。

你可以在你的 case 周围多放一个 {}:

switch(a) {
    case 1:{
        let a = 1;
    }
}

大多数具有块作用域的 c-ish 语言都是这种情况。