Language/JavaScript

호이스팅

Developer Rio 2022. 12. 17. 21:11

핵심키워드 : 호이스팅, 스코프 , 변수의 선언, 메모리 할당, 변수 초기화

본 포스트에서는 스코프의 개념보다 호이스팅이라는 기능 자체에 초점을 다뤄서 이야기 해볼까 한다. 변수의 선언, 메모리할당, 변수의 초기화의 개념이 없다면 글을 이해하는게 힘들 수 있음으로 공부 후 읽기를 권장한다.

호이스팅이란? 

MDN공식문서에 적혀진 내용은 다음과 같다.

 JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다. 반면 let const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.

 

즉,  var은 변수객체에 변수를 등록하는 동시에 undefine으로 메모리를 할당하고, const와 let은 변수 객체에 변수를 등록했지만 메모리 할당은 하지않는다. 따라서 변수 초기화전에 메모리에 접근해가 되면 오류가 발생한다. 즉 스코프 시작지점부터 초기화지점까지를 TDZ(Temporal Dead Zone)이라고 한다.

 

호이스팅을 하는이유?

js엔진은 코드실행전, 실행가능한 코드를 형상화하고 구분하는 실행컨텍스트과정이 있다.

이 과정에서 var let cons function clss 등이 변수객체에 저장된다. 즉 실행컨텍스트를 만들기위해 호이스팅을 이용한다.

'Language > JavaScript' 카테고리의 다른 글

JS / == 과 ===차이  (0) 2022.12.04
Js의 깊은 복사 얕은 복사  (0) 2022.11.26
JS정규표현식  (0) 2022.11.14
PS시 유용한 JS메소드  (0) 2022.11.08
PS시 유용한 JS문법  (0) 2022.11.07