みかづきブログ その3

3ヶ月つづけてみました。

switch文でletをつかう

switch (txt) {
  case "hoge":
    let i = 0;

    break;
  case "fuga":
    let i = 1;

    break;
  case "piyo":
    let i = 2;

    break;
}

こんな感じで書いたら、

Uncaught SyntaxError: Identifier 'i' has already been declared

とエラーになりました。

そう。なぜならブロックスコープはswitchの範囲で切られているからです。
(上記例であればswitch文を使うまでもないという意見も出そうですが、余計なものを省いてシンプルにしています)

switch (txt) {
  case "hoge": {
    let i = 0;

    break;
  }
  case "fuga": {
    let i = 1;

    break;
  }
  case "piyo": {
    let i = 2;

    break;
  }
}

という感じでブロックスコープを設定したらエラーが消えました。

ちなみに、

{
  let i = 0;

  console.log(i);
}
{
  let i = 1;

  console.log(i);
}

という感じで、letのためだけにブロックスコープを切っても良いっちゃ良いみたいですね。
積極的に使う必要はないですが。