1. var:
• 호이스팅: var는 선언과 초기화가 동시에 호이스팅됩니다. 즉, 코드에서 선언된 위치와 상관없이 변수는 최상위로 끌어올려집니다.
• 초기화 상태: var는 초기화가 되기 때문에 선언 전에 접근할 수 있으며, 이때 값은 undefined로 초기화됩니다.
• 스코프: var는 함수 스코프를 가집니다. 즉, 블록 스코프(예: if, for) 내부에서 선언하더라도 함수 범위에서 유효합니다.
• 재선언: 동일한 이름으로 여러 번 재선언이 가능합니다.
console.log(x); // undefined
var x = 10;
2. let:
• 호이스팅: let도 선언이 호이스팅되지만, 초기화는 실제 코드에서 선언되는 위치에서 이루어집니다. 선언 전에 접근하면 ReferenceError가 발생합니다. 이것은 Temporal Dead Zone(TDZ) 때문입니다.
• 초기화 상태: 선언 전에 사용할 수 없으며, 초기화된 후에만 접근 가능합니다.
• 스코프: let은 블록 스코프를 따릅니다. 즉, {}로 묶인 블록 내에서만 유효하며, 블록 밖에서는 접근할 수 없습니다.
• 재선언: 동일한 이름으로 다시 선언할 수 없습니다.
console.log(y); // ReferenceError: y is not defined
let y = 20;
3. const:
• 호이스팅: const도 선언이 호이스팅되지만, 선언 전에 접근할 수 없으며 TDZ에 의해 ReferenceError가 발생합니다.
• 초기화 상태: 선언 시 반드시 초기값을 설정해야 하며, 이후에는 값이 변경되지 않습니다(재할당 불가능).
• 스코프: let과 마찬가지로 블록 스코프를 따릅니다.
• 재선언: const로 선언한 변수는 동일한 이름으로 다시 선언할 수 없습니다.
const z = 30;
z = 40; // TypeError: Assignment to constant variable.
요약:
• 호이스팅: var는 선언과 초기화가 동시에 호이스팅되고, let과 const는 선언만 호이스팅되며 초기화는 나중에 발생.
• 스코프: var는 함수 스코프, let과 const는 블록 스코프.
• 재선언/재할당: var는 재선언이 가능, let은 재선언 불가하지만 재할당 가능, const는 재선언 및 재할당 불가.
'JavaScript' 카테고리의 다른 글
[JS] 자바스크립트의 동작방식(비동기,동기) (0) | 2024.09.08 |
---|---|
[JS] Callback (0) | 2024.09.08 |
[JS] 함수와 클래스(this) (0) | 2024.09.08 |
[JS] Scope (0) | 2024.09.08 |
[JS] Execution context (0) | 2024.09.08 |