본문 바로가기
JavaScript

[JS] 자바스크립트 변수 선언과 호이스팅

by goblin- 2024. 9. 8.

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는 선언과 초기화가 동시에 호이스팅되고, letconst는 선언만 호이스팅되며 초기화는 나중에 발생.

스코프: var는 함수 스코프, letconst는 블록 스코프.

재선언/재할당: 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