Javascript 为什么switch语句只有一个底层块?
我很高兴JavaScript有了声明块作用域局部变量的新功能。但是,在switch语句中声明toJavascript 为什么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; } } 果不
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不使用块作用域。”这是不正确的。