switchのcase内でconstを使ったら…
何気なくswitch文を書いていたら、こんな記述をした時に怒られてしまいました。
const hoge = 'hoge'
switch (hoge) {
case 'hoge':
const fuga = 'fuga'
break
default:
const fuga = 'fuga'
}constがブロック内に2つある、つまり、fuga はすでに定義されていますよ、ということだ。
確かに、同じブロック内で定義されているもんね。
ブロックにしてあげる
解決方法は、case文を囲ってあげるとエラーが解消される。
const hoge = 'hoge'
switch (hoge) {
case 'hoge': {
const fuga = 'fuga'
break
}
default: {
const fuga = 'fuga'
}
}当たり前っちゃあ当たり前なのだが、スコープのことを考えるならば確かにこうあるべきだ。
ちなみに、ESLintでもno-case-declarationsとしてルール化されているようだ。
こちらの使用方法についてコメントいただいたので補足します!
今回何故このようにcase文内でconstを宣言したいと思ったかというと、case毎に処理を分岐させたかったためです。
結局caseの中身もfunction化してしまったためこの記法は使用しませんでしたが、ESLintでも紹介されている方法だったので紹介させていただきました!




















