为什么 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 语言都是这种情况。
我很高兴 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 语言都是这种情况。