📌
JavaScript の switch case で同名の変数を const で定義したらエラーになった
JavaScript で次のように switch case で代入式を書いたらエラーになった。
const value = 1
switch(value){
case 1:
const result = "one"
break
case 2:
// SyntaxError: Identifier 'result' has already been declared
const result = "two"
break
}
console.log(result);
const
を消せば動作するようになる。
const value = 1
switch(value){
case 1:
result = "one"
break
case 2:
result = "two"
break
}
console.log(result);
// => one
これは変数を定義しているスコープが case
はなくて switch {}
の方にかかっているからかな?
break
がないとそのまま下の case
のコードが呼ばれちゃうからなあ。
なのて case
でも {}
でスコープを区切れば件のエラーはでなくなるが、今度は case
の外から変数の参照ができなくなる。
const value = 1
switch(value){
case 1: {
const result = "one"
}
case 2: {
// ここは問題ない
const result = "two"
}
}
// ここでエラーになる
// ReferenceError: result is not defined
console.log(result);
悩ましい。
Discussion