📌

JavaScript の switch case で同名の変数を const で定義したらエラーになった

2024/01/16に公開

JavaScript で次のように switch case で代入式を書いたらエラーになった。

const value = 1

switch(value){
	case 1:
		const result = "one"
		break
	case 2:
		// SyntaxError: Identifier 'result' has already been declared
		const result = "two"
		break
}
console.log(result);

const を消せば動作するようになる。

const value = 1

switch(value){
	case 1:
		result = "one"
		break
	case 2:
		result = "two"
		break
}
console.log(result);
// => one

これは変数を定義しているスコープが case はなくて switch {} の方にかかっているからかな?
break がないとそのまま下の case のコードが呼ばれちゃうからなあ。
なのて case でも {} でスコープを区切れば件のエラーはでなくなるが、今度は case の外から変数の参照ができなくなる。

const value = 1

switch(value){
	case 1: {
		const result = "one"
	}
	case 2: {
		// ここは問題ない
		const result = "two"
	}
}

// ここでエラーになる
// ReferenceError: result is not defined
console.log(result);

悩ましい。

GitHubで編集を提案

Discussion