在switch case中定义变量报错,例如:
let num = 1
switch(num){
case 1:
let a = 1
break
default:
console.log(a) //1
}
再例如
switch(num){
case 1:
let a = 1
break
case 2:
let a = 2
break
default:
console.log(a) //报错 提示has already been declared
}
看出每个case不会构成单独的作用域,整个的switch是一个作用域。
let num = 1
switch(num){
case 1:
a = 1
break
default:
console.log(a) //1 全局变量绑在window上,所以可以打印
}
但是:
let num = 2
switch(num){
case 1:
let a = 1
break
case 2:
a = 2
break
}
这种情况会报a未定义,因为case1并未执行,如果num改为1 ,则不会报错。
问题无法解决,换成了if-else