While creating JavaScript with ASP.NET MVC I noticed several scope warnings and realized that I am missing something with understanding the variable scope inside the switch / case statement.
Warning: ‘i’ is already defined referring to case b and case c
My code looks similar to this:
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;
}
I thought scope ended with each break statement but it seems that scope does not end until the end of the switch/case. Is scope for the entire switch/case?
From the MDN documentation: "The
caseanddefaultclauses don’t create lexical scopes."Therefore, all variables declared inside a
switchstatement, live within the same scope. Declaring a variable usinglet/constwith the same name with throw an Error.If you want to create a separate (nested) block scope inside a
caseclause, you can uselabels:There is no C-like language (that I know of) in which each
casestatement forms an independent scope.For example, the following C# code will also not compile: