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

Javascript 为什么switch语句只有一个底层块?,javascript,switch-statement,let,Javascript,Switch Statement,Let,我很高兴JavaScript有了声明块作用域局部变量的新功能。但是,在switch语句中声明tolet变量时,似乎存在类型错误,这对于使用let非常有用 function test(x) { 'use strict'; switch (x) { case 0: let foo; break; case 1: let foo; // TypeError for redeclaration. break; } } 果不

我很高兴JavaScript有了声明块作用域局部变量的新功能。但是,在switch语句中声明to
let
变量时,似乎存在类型错误,这对于使用
let
非常有用

function test(x) { 
  'use strict';
  switch (x) {
    case 0:
      let foo;
      break;

    case 1:
      let foo; // TypeError for redeclaration.
      break;
  }
}
果不其然,显示了以下示例:

您可能会在switch语句中遇到错误,因为只有一个底层块


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

基本上可以归结为switch是如何工作的,它的语法表示为它只有一对
{}

因为你可以通过漏掉
break
,从一个案例跌落到另一个案例——在这种情况下,你会希望拥有相同的范围

您可以在箱子周围放置一个额外的
{}

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

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

在同一块中不能有2个
foo
。@Johnnymop我不确定您是否阅读了我的问题。:块语句。。。用于将零个或多个语句分组。块由一对花括号分隔。@MarcB谢谢你提出类似的问题。这不太一样,因为它是在
let
之前被问到的,答案是“Javascript不使用块作用域。”这是不正确的。