1. var (과거 방식, 사용 지양)
함수 스코프(Function Scope)
- var로 선언된 변수는 함수 내부에서만 유효하고, 블록({}) 내부에서는 제한되지 않음
재선언 가능
- 같은 변수명을 여러 번 선언해도 오류가 발생하지 않음
호이스팅(Hoisting) 발생
- 선언된 변수가 코드 최상단으로 끌어올려짐
- 하지만 undefined로 초기화되므로 예측하지 못한 오류가 발생할 수 있음
function example() {
if (true) {
var x = 10;
}
console.log(x); // 10 (블록 범위 무시)
}
var a = 1;
var a = 2; // 가능 (재선언 허용)
console.log(b); // undefined (Hoisting 발생)
var b = 5;
결론: var는 예측하지 못한 오류를 유발할 가능성이 높아서 let과 const를 사용하는 것이 좋음
2. let (블록 범위 변수, 최신 문법)
블록 스코프(Block Scope)
- {} 내부에서 선언된 변수는 해당 블록 안에서만 유효
재선언 불가능, 재할당 가능
- 같은 변수명을 중복 선언할 수 없지만, 값을 변경할 수 있음
호이스팅 발생 (초기화 안 됨)
- var처럼 호이스팅이 되지만, 초기화되지 않아서 참조 전에 오류 발생
function example() {
if (true) {
let y = 20;
}
console.log(y); // 오류 (y is not defined)
}
let a = 1;
let a = 2; // 오류 (재선언 불가능)
console.log(b); // 오류 (Cannot access 'b' before initialization)
let b = 5;
결론: let은 var보다 안전하고, 가변적인 값을 다룰 때 사용하면 좋음.
3. const (상수, 변경 불가)
블록 스코프(Block Scope)
- let과 동일하게 {} 내부에서만 유효
재선언 불가능, 재할당 불가능
- 한 번 값을 설정하면 변경할 수 없음
호이스팅 발생 (초기화 안 됨)
- let과 마찬가지로 선언 전에 접근하면 오류 발생
const PI = 3.14;
PI = 3.1415; // 오류 (Assignment to constant variable)
const user = { name: "Alice" };
user.name = "Bob"; // 가능 (객체 속성은 변경 가능)
user = {}; // 오류 (객체 자체 변경 불가)
결론: const는 값이 변하지 않는 경우 사용하면 좋음. (단, 객체나 배열 내부 값은 변경 가능)
키워드 | 스코프 | 재선언 | 재할당 | 호이스팅 | 사용 추천 여부 |
var | 함수 스코프 | 가능 | 가능 | 가능(undefined) | 사용 지양 |
let | 블록 스코프 | 불가능 | 가능 | 가능 (초기화 X) | 사용 추천 |
const | 블록 스코프 | 불가능 | 불가능 | 가능 (초기화 X) | 상수에 사용 |
'Front > JavaScript' 카테고리의 다른 글
JavaScript) 날짜 및 시간 다루기 (Date 객체 활용) (0) | 2025.02.20 |
---|---|
JavaScript) 동적으로 HTML 태그 생성하기 (0) | 2025.02.20 |
JavaScript) 연습문제 (0) | 2025.02.20 |
JavaScript) 이벤트 처리 : 사용자의 입력 / 버튼 클릭 / 체크박스 체크 이벤트 처리 방법 (0) | 2025.02.19 |
JavaScript) 변수와 데이터 타입 / 객체와 배열 정리 (0) | 2025.02.19 |