핵심키워드 : 호이스팅, 스코프 , 변수의 선언, 메모리 할당, 변수 초기화
본 포스트에서는 스코프의 개념보다 호이스팅이라는 기능 자체에 초점을 다뤄서 이야기 해볼까 한다. 변수의 선언, 메모리할당, 변수의 초기화의 개념이 없다면 글을 이해하는게 힘들 수 있음으로 공부 후 읽기를 권장한다.
호이스팅이란?
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 |