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

时间:2015-11-19 18:49:34

标签: javascript switch-statement let

我很高兴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显示了这个例子:

  

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

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

1 个答案:

答案 0 :(得分:3)

基本上归结为交换机如何工作,并且在语法中表达它只有一对{}

由于错过了break,你可以从一个案件落到另一个案件中 - 在这种情况下,你希望拥有相同的范围。

您可以在案件周围添加额外的{}

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

大多数具有块范围的c-ish语言都是这种情况。