在使用ASP.NET MVC创建
JavaScript时,我注意到几个范围警告,并意识到我缺少理解switch / case语句中变量范围的内容.
警告:“我”已经被定义为涉及案例b和案例c
我的代码看起来类似于:
switch(element) {
case 'a':
for(var i=0; i < count; i++){
do something
}
break;
case 'b':
for(var i=0; i < count; i++){
do something
}
break;
case 'c':
for(var i=0; i < count; i++){
do something
}
break;
}
我认为范围以每个break语句结束,但是看起来范围在结束switch / case之前不会结束.是整个开关/箱的范围?
解决方法
Javascript不使用块范围.
因此,所有局部变量在它们被声明的整个功能范围内.
然而,在你的具体情况下,没有类似C语言的语言(我知道的),其中每个case语句形成一个独立的范围.
例如,以下C#代码将无法编译:
switch(someVar) {
case 1:
int a;
break;
case 2:
int a; //'a' is already defined
break;
}