2015-11-19 54 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-雜交種語言塊範圍。