1. 스코프(Scope)
- var: 함수 스코프
- var로 선언된 변수는 함수 내에서만 유효합니다. 함수 바깥에서 선언하면 전역 변수로 간주됩니다.
- 블록({}) 내에서 선언해도 블록을 무시하고 함수 스코프에 따라 동작합니다.
javascript코드 복사function testVar() { if (true) { var x = 10; // 함수 스코프 } console.log(x); // 10 } testVar(); - let: 블록 스코프
- let로 선언된 변수는 선언된 블록 내에서만 유효합니다.
javascript코드 복사function testLet() { if (true) { let y = 20; // 블록 스코프 console.log(y); // 20 } console.log(y); // ReferenceError: y is not defined } testLet();
2. 변수 중복 선언
- var: 동일한 스코프에서 변수 중복 선언이 가능합니다.
javascript코드 복사var a = 1; var a = 2; // 중복 선언 가능 console.log(a); // 2
- let: 동일한 스코프에서 변수 중복 선언이 불가능합니다.
javascript코드 복사let b = 1; let b = 2; // SyntaxError: Identifier 'b' has already been declared
3. 변수 호이스팅(Variable Hoisting)
- var: 호이스팅 시 변수 선언이 함수 또는 전역 스코프의 최상단으로 끌어올려지며, 초기화는 끌어올려지지 않기 때문에 undefined로 초기화됩니다.
javascript코드 복사console.log(c); // undefined var c = 3;
- let: 호이스팅은 되지만, 선언 전에 접근하면 ReferenceError가 발생합니다.
javascript코드 복사console.log(d); // ReferenceError: Cannot access 'd' before initialization let d = 4;
4. 전역 객체와의 관계
- var: 전역 스코프에서 선언된 var 변수는 브라우저의 window 객체의 속성이 됩니다.
javascript코드 복사var e = 5; console.log(window.e); // 5
- let: 전역 스코프에서 선언된 let 변수는 window 객체의 속성이 되지 않습니다.
javascript코드 복사let f = 6; console.log(window.f); // undefined
5. TDZ(Temporal Dead Zone, 임시적 사각지대)
- **let**은 변수 선언 전에 접근할 수 없는 영역(TDZ)이 존재합니다. 선언 이전에 해당 변수에 접근하려고 하면 오류가 발생합니다.
요약
특징varlet
스코프 | 함수 스코프 | 블록 스코프 |
중복 선언 | 허용 | 허용되지 않음 |
호이스팅 | 초기화되지 않은 undefined | TDZ로 오류 발생 |
전역 객체(window) 연결 | 연결됨 | 연결되지 않음 |
var는 과거의 코드에서 많이 사용되었지만, 현재는 더 안전하고 예측 가능한 동작을 제공하는 let과 const를 사용하는 것이 권장됩니다.
둘의 사용 구분과 이유정도는 알고 나누어 사용하는것이 좋을 것 같다.
'Web > 개인적인 공부정리' 카테고리의 다른 글
[javascript / typescript] ?를 이용한 optional 처리 및 병합 (0) | 2025.06.19 |
---|---|
[Javascript] 날짜 (yyyy-mm-dd) 유효성 검사 (윤달까지 적용) - 저장용 (1) | 2024.11.21 |
[JavaScript] 콜백함수 예제 (1) | 2024.11.20 |
fetch와 CDATA 를 사용한 jsp페이지내 동적인 html요소 구성시 장단 (1) | 2024.08.26 |