반응형
JavaScript에서 var와 let은 변수를 선언할 때 사용되지만, 몇 가지 중요한 차이점이 있습니다. 주로 스코프(변수의 유효 범위), 재선언 가능 여부, 호이스팅(hoisting) 동작에서 차이가 나타납니다.
1. 스코프(Scope)
- var: 함수 스코프(Function Scope)를 가집니다. 즉, var로 선언된 변수는 함수 내부 어디에서든 접근할 수 있습니다. 하지만 블록 내부에 선언되어도 블록 외부에서 접근할 수 있습니다.
- let: 블록 스코프(Block Scope)를 가집니다. 즉, let으로 선언된 변수는 중괄호 {}로 감싸인 블록 내부에서만 접근할 수 있습니다.
예시:
function testVar() {
if (true) {
var x = 10;
}
console.log(x); // 10 (블록 외부에서도 접근 가능)
}
function testLet() {
if (true) {
let y = 10;
}
console.log(y); // ReferenceError: y is not defined (블록 외부에서 접근 불가)
}
2. 재선언 가능 여부
- var: 같은 스코프에서 같은 이름의 변수를 다시 선언할 수 있습니다.
- let: 같은 스코프 내에서 동일한 변수 이름을 재선언할 수 없습니다.
예시:
var a = 5;
var a = 10; // 가능, 같은 이름의 변수 재선언 가능
let b = 5;
let b = 10; // SyntaxError: Identifier 'b' has already been declared (같은 이름의 변수 재선언 불가)
3. 호이스팅(Hoisting)
- var: 변수 선언이 호이스팅(코드가 실행되기 전에 선언이 끌어올려지는 현상)되며, 초기화가 되지 않은 상태에서 undefined 값을 가집니다.
- let: 변수 선언 역시 호이스팅되지만, 선언 전에 해당 변수에 접근하려고 하면 ReferenceError가 발생합니다. 이를 "일시적 사각지대(Temporal Dead Zone)"라고 부릅니다.
예시:
console.log(a); // undefined (호이스팅 됨)
var a = 5;
console.log(b); // ReferenceError: Cannot access 'b' before initialization
let b = 5;
4. 변수 업데이트
- **var**와 let 모두 변수의 값을 업데이트할 수 있습니다.
예시:
var x = 10;
x = 20; // 가능
let y = 10;
y = 20; // 가능
요약
- var는 함수 스코프를 가지며, 재선언 가능하고, 호이스팅 시 undefined 값을 가집니다.
- let은 블록 스코프를 가지며, 재선언 불가능하고, **호이스팅 시 "일시적 사각지대"**에서 접근하면 에러가 발생합니다.
일반적으로 **let**을 사용하는 것이 더 안전하며, 코드에서 의도치 않은 오류를 방지하는 데 유리합니다.
반응형
'프로그래밍 공부 > JavaScript' 카테고리의 다른 글
JavaScript 제어문과 반복문 (0) | 2024.11.22 |
---|---|
JavaScript 기본 문법 (1) | 2024.11.20 |
[JavaScript] 문자열 객체를 이용해 문자열 바꿔서 출력하기 (0) | 2023.02.02 |
[JavaScript] 평균 판매량을 구하고, 4분기 판매량을 입력 받아 이상/미달 값을 출력하세요. (0) | 2023.02.02 |
[JavaScript] 하루 지출 비용의 합계를 구하고 적정 지출 비용의 초과 여부를 삼향 조건 연산자를 사용하여 출력하기 (0) | 2023.02.02 |