데브 코스/TIL

[TIL]호이스팅

1. 호이스팅에 대해 알아보자.

 JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언전에 미리 할당하는 것을 의미한다.

 

2. Var, function

var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화 한다. 반면 let, const로 선언한 변수의 경우 호이스팅 시 변수를 초기화 하지 않는다. 

hello(); 
function hello() {
  console.log('Hello');
}
// 함수가 호이스팅되어 Hello 출력. 함수의 코드를 실행하기전에 함수 선언에 대한 메모리부터 할당하기 때문.
console.log(num); // 호이스팅으로 인한 var '선언'으로 인해 undefined 출력.
var num = 7; // 선언과 초기화.
console.log(num); // 호이스팅으로 인한 var '선언'으로 인해 undefined 출력.
var num // 선언
num = 7; // 초기화.

 선언만 호이스팅 대상이다! 선언과 초기화를 함께 수행하는 경우, 선언 코드까지 실행해야 변수가 초기화된 상태가 된다.

 

3. let과 const 호이스팅

 let과 const로 선언한 변수도 호이스팅 대상이지만, var와 달리 호이스팅 시 undefined로 변수를 초기화하지는 않는다. 따라서 변수의 초기화를 수행하기 전에 읽는 코드가 먼저 나타나면 예외가 발생한다.

// 초기화 전에 읽는 코드가 먼저 나타났으므로 에러가 발생한다.
console.log(num); // ReferenceError: Cannot access 'num' before initialization
let num; // 선언
num = 7; // 초기화.

 

 

'데브 코스 > TIL' 카테고리의 다른 글

[TIL]프로토타입  (0) 2022.10.18
[TIL]Day2  (0) 2022.10.18
[TIL]네트워크 통신  (0) 2022.10.18
[TIL]Task Queue,Microtask Queue, Animation frames  (0) 2022.10.18
[TIL]HTTP? HTTPS?  (0) 2022.10.18