2015-11-19 44 views
1

我很高兴JavaScript有新的let statement来声明一个块作用域局部变量。但是,在switch语句中声明let变量时,似乎会出现类型错误,这对于使用let来说非常有用。为什么switch语句只有一个底层块?

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

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

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

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

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

+0

你不能在同一个块中有2个'foo'。 –

+2

@JohnnyMopp我不确定你读了我的问题。 – styfle

+0

http://stackoverflow.com/questions/2524397/what-is-the-javascript-variable-scope-in​​-a-switch-case-statment –

回答

3

基本上可以归结为下如何切换工作,而其在它只有一对的{}

因为你怎么可以,虽然从一个案件被错过了break掉落到其他的语法来表示 - 在这种情况下,你会想要有相同的范围。

你可以把一个额外的{}你周围的情况:

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

这种情况是大多数C-杂交种语言块范围。

相关问题