switch/case语句中的JavaScript变量范围是什么?

Tod*_*ses 10 javascript asp.net-mvc scope

在使用ASP.NET MVC创建JavaScript时,我注意到了几个范围警告,并意识到我在理解switch/case语句中的变量范围时遗漏了一些东西.

警告:'i'已经定义,参考案例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;
}
Run Code Online (Sandbox Code Playgroud)

我认为范围以每个break语句结束,但似乎范围不会在switch/case结束之前结束.是整个开关/机箱的范围?

SLa*_*aks 15

Javascript不使用块范围.

因此,所有局部变量都在声明它们的整个函数的范围内.

但是,在您的特定情况下,没有类似C语言(我知道),其中每个case语句形成一个独立的范围.
例如,以下C#代码将无法编译:

switch(someVar) {
    case 1:
        int a;
        break;
    case 2:
        int a;        //'a' is already defined
        break;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在类似C语言(而不是Javascript)中,如果您希望:`case 1:{...},您可以在案例之后自己创建一个范围. (3认同)