JavaScriptにおけるif-else内の変数のスコープ
簡単のために、常に真となる 条件を用意しましょう:
if (true) {
}
次のコードを見てみましょう:
if (true) {
let res = '!';
}
console.log(res);
ご覧の通り、変数 res には
値 '!' が代入されるはずです。しかし、
このコードを実行すると、コンソールに
エラーが表示されます!
これは、中括弧 { } の内側で宣言された変数は、 その中括弧の内側でのみ参照可能であり、外側からは 見えないためです。専門的には、 これは 変数のスコープ についての話です。
中括弧内で宣言された変数のスコープは、 その中括弧内だけであると言えます。しかし、 中括弧の外側で宣言された変数は、 その内側でも外側でも参照可能です:
let res; // 変数は外側で宣言
if (true) {
res = '!';
}
console.log(res); // '!' を表示
次の例では、変数 res に
条件に応じて値 1 または 2 を
代入しています:
let num = 5;
if (num >= 0) {
let res = 1;
} else {
let res = 2;
}
console.log(res);
しかし、このコードを実行すると、コンソールに エラーが表示されます。今ではおわかりのように、 原因は変数の可視性です。問題を解決するために、 条件の外側で変数を宣言しましょう:
let test = true;
let res; // 条件の外側で変数を宣言
if (test) {
res = 1;
} else {
res = 2;
}
console.log(res); // 1 を表示
以下のコードの作者は、年齢が 18 歳に
達しているかどうかを確認しようとしました。
しかし、コードは動作しません。
作者のコードの誤りを修正してください。問題のコードはこちらです:
let age = 17;
if (age >= 18) {
let adult = true;
} else {
let adult = false;
}
console.log(adult);