次の違いは何ですか?
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
。