switchの各caseに同じ名前のconstを書いたら、別の分岐なのにSyntaxErrorになりました。caseラベル自体はスコープを分けません。各caseを波括弧で囲むと名前を分けられますが、breakによる処理の終了は別に必要です。
macOS 27.0.1・Node.js v24.22.1で、2026年10月30日に以下の4例を実行しました。ブラウザ・TypeScript・Windowsでは試していません。
別のcaseでも同じconstは宣言できない
switch ('b') {
case 'a':
const label = 'A';
break;
case 'b':
const label = 'B';
console.log(label);
}
実測結果は次のエラーです。
SyntaxError: Identifier 'label' has already been declared
'a'と'b'が同時に選ばれないことは、このエラーを避ける条件になりません。ここではswitch本体の同じ宣言領域にlabelを二度置いています。最初のbreakに届くかどうかよりも前に、コードの構文上の問題になります。
分岐を追加した直後なら、同じswitchの中でconstやletの名前が重なっていないか確認します。
重複を消しても、別caseの変数は初期化されていない
次は二つ目のconstを削り、最初のcaseで宣言したlabelを読みます。
switch ('b') {
case 'a':
const label = 'A';
break;
case 'b':
console.log(label);
}
実測結果です。
ReferenceError: Cannot access 'label' before initialization
名前が同じ領域にあることと、値が入った状態で読めることは別です。今回は'b'から始まるため、labelの初期化を実行せずに読みました。エラー名が変わっただけで、直ったわけではありません。
各caseの処理を波括弧で囲む
分岐ごとに独立した作業用変数なら、明示的なブロックを作ります。
switch ('b') {
case 'a': {
const label = 'A';
console.log(label);
break;
}
case 'b': {
const label = 'B';
console.log(label);
break;
}
}
出力はBでした。それぞれのlabelは別のブロックの変数です。同じ名前でも今回の重複宣言エラーは起きません。
ここでの波括弧は変数の有効範囲を区切り、breakはswitchから処理を抜けます。役割が違うため、両方を確認します。
波括弧だけでは次のcaseへ進む
switch ('a') {
case 'a': {
console.log('A');
}
case 'b': {
console.log('B');
break;
}
}
実測ではA、Bの順に出ました。
A
B
'b'に一致したからBが出たのではありません。'a'の処理を終えたあと、breakがないためそのまま次の処理へ進んでいます。こうした進み方をフォールスルーと呼びます。意図して共通処理へ進める設計もありますが、独立した分岐にするなら抜ける位置を確かめます。
実測はnew Function(code)で一例ずつ評価し、エラー名とメッセージを保存しました。一例目をソースファイルに直接置いても構文上の問題は残ります。
AIが生成したswitchを確認するときは、各caseに波括弧があるか、同じ名前をどこで宣言しているか、次へ進ませる意図があるかを別々に読みます。さらに、入力'a'と'b'の両方で出力を比べると、breakの抜けも見つけやすくなります。
仕様の参照先
ECMAScriptのswitch文には、CaseBlockのLexicallyDeclaredNamesに重複があれば構文エラーとする規則と、switch本体のために宣言を準備する処理があります。caseラベルがブロックを作る、という読み方はできません。
未経験者向けの体験版を公開しています
- ▶ ライブデモ(インストール不要・無料)→ https://trial-web-ayies128s-projects.vercel.app/?ref=qiita
- 無料体験版(git clone して手元で動かす・⭐ Star もよろしくお願いします)→ https://github.com/ayies128/next-ai-camp-trial
- YouTube『AIエンジニア情報局』(AI×開発ニュースを1本5分で)→ https://www.youtube.com/channel/UC1rXVD9WYsQPQEWZyd-A1KA/?ref=qiita
※ 中上級者には易しすぎる内容なので、初心者の知り合いへの紹介や社内研修の参考としてどうぞ。