본문 바로가기

Front-End/JavaScript

호이스팅(Hoisting)

호이스팅에 대한 정리 중... 일단 끄적이기

실행컨텍스트도 정리해야함. 호이스팅보다 먼저오게해야지

 

 

호이스팅이란?

Hoisting 의 사전적 정의는 끌어올리기, 들어올려 나르기이다.

 

먼저 코드를 보자.

1
2
3
console.log(a);
var a = 100;
console.log(a);
cs

위 코드는 자바스크립트에서 문제없이 동작한다. 그 이유는 이 포스트의 주제인 호이스팅때문이다.

자바스크립트에서의 호이스팅은 var 선언문이나 혹은 function 선언문 등 모든 선언문이 해당 Scope 의 최상단으로 끌어올려진 것처럼 동작하는 특성을 일컫는다. 즉, 자바스크립트에서의 모든 선언문은 선언되기 이전에 참조가 가능하다.

 

이러한 동작을 하는 이유는 변수 선언부터 이해해야한다. 변수 선언은 총 3단계로 이뤄진다.

 

선언 단계(Declaration phase)
=> 변수 객체(Variable Object)에 변수를 등록한다. 이 변수 객체는 스코프가 참조하는 대상이 된다.


초기화 단계(Initialization phase)
=> 변수 객체(Variable Object)에 등록된 변수를 메모리에 할당한다. 이 단계에서 변수는 undefined로 초기화된다.


할당 단계(Assignment phase)
=> undefined로 초기화된 변수에 실제값을 할당한다.

 

다시 코드를 가져와 위의 예제를 다시 정리해보자면 

1
2
3
4
var a;
console.log(a);
= 100;
console.log(a);
cs

위의 코드와 같이 변형되어 동작하는 것처럼 보일 것이다.

즉, a 라는 변수는 선언단계와 초기화단계를 거치기때문에 2번째 줄의 console.log 에서 undefined 가 출력될 것이다. 이후 3번째 줄에서 할당 단계를 거칠 것이고 변수 a 에는 100이란 값이 할당되어 4번째 줄의 console.log 에서 100 을 출력할 것이다.

 

 

참고

https://poiemaweb.com/js-data-type-variable#24-%EB%B3%80%EC%88%98-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85variable-hoisting

'Front-End > JavaScript' 카테고리의 다른 글

실행 컨텍스트(Execution context)  (0) 2019.08.16