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でも紹介されている方法だったので紹介させていただきました!