JavaScript

[JS]switch文のcaseはブロックで記述してみよう!

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

ABOUT ME
どんぶラッコ
ECコンサルタント、システムエンジニアを経て、quintet株式会社CTOに就任。普段はNuxt.jsやLaravelを使用しています。

\面白いと思ったら/

記事のシェア & Twitter のフォロー をお願いします!

@proglearn
RELATED POST

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です