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);