Hoisting(호이스팅)
이란 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는것.
Hoisting(호이스팅)
은 변수나 함수의 선언만 유효 범위의 최상단으로 옮기는 것
자바스크립트 엔진은 코드를 실행하기 전 실행 가능한 코드를 형상화하고 구분하는 과정(*실행 컨텍스트를 위한 과정)을 거친다.
실행 컨텍스트
란?
실행 가능한 코드가 실행되기 위해 필요한 환경을 의미하고 실행되기전 이러한 실행 컨텍스트 과정(코드를 구분하는 과정)을 거친다.
3가지 단계를 거쳐 변수를 생성한다.
선언 단계(Declaration Phase)
: 변수 객체를 실행 컨텍스트에 등록한다.초기화 단계(Initialization Phase)
: 등록된 변수의 메모리를 확보한다. 이 단계에서는 변수는할당 단계(Assignment Phase)
: 초기화된 변수에 실제 값을 할당한다.var 키워드 변수
var 키워드 변수는 선언 단계
와 초기화 단계
가 동시에 진행된다.
자바스크립트 내부적으로 실행 컨텍스트의 변수 객체에 변수를 등록하는 동시에 메모리를 undefined 로 만들어 버린다.
let ,const키워드 변수
let ,const 키워드는 var 키워드와 다르게 선언 단계
와 초기화 단계
가 분리되어 진행된다.
실행 컨텍스트의 변수 객체에 변수를 등록했지만, 메모리에 할당되지 않아 접근할 수 없다.
Reference Error: Cannot access before initialization
에러 문구가 나오는 것이다.
호이스팅은 선언만을 스코프 최상단으로 옮기므로 , 변수 스코프의 최상단부터 let과 const가 위치한 지점까지는
일시적 사각지대 (Temporal Dead Zone , TDZ)
가 된다. 즉,호이스팅이 되지 않는 것이 아니라, 호이스팅은 되었으나 메모리가 할당되지 않아 접근할 수 없는 것
일시적 사각지대 (Temporal Dead Zone , TDZ)
: 선언단계와 초기화 단계 사이에 잠시 머물러 있는것
참고: