ES6 の case の後の switch ステートメントで中括弧は何をしますか? 質問する

ES6 の case の後の switch ステートメントで中括弧は何をしますか? 質問する

次の違いは何ですか?

switch (expression) {
    case:
      somethings;
      break;
}

そして

switch (expression) {
    case: {
      somethings;
      break;
    }
}

最初は、このようにオブジェクトリテラルを返すことができると思いましたが、構文エラーであることがわかりました。実際のところ、違いは何でしょうか?

別の質問からの例:Javascript ES6 で switch ステートメントを関数の引数として渡すにはどうすればよいでしょうか?

ベストアンサー1

このように使用される中括弧は独自のブロック スコープを確立し、その中でローカルlet変数またはconst定数を定義できます。

switch (false) {
    case true: {
      let x = "bar";
      console.log(x);
      break;
    }

    case false: {
      let x = "baz";
      console.log(x);
      break;
    }
}

この例では、Ecmascript 2015 では同じスコープ内で同じ識別子を持つ複数のlet/宣言が許可されていないため、ネストされたブロック スコープがないとエラーがスローされます。const

ステートメント自体がブロック スコープを作成することに注意してくださいswitch。つまり、ネストされたブロック スコープを使用するかどうかに関係なく、内部のlet/const宣言はswitch親スコープに漏れません。

ただし、 のコンテキストではswitch、中括弧は個々のブランチのブロックを視覚的に強調するために、純粋に装飾的にも使用されますcase

おすすめ記事