switch case的作用域
阿新 • • 發佈:2020-11-12
在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