호이스팅(Hoisting)
- 호이스팅은 현재 실행 할 스코프 내 식별자 정보를 수집하는 과정에서 발생하는 현상
- 실행 컨텍스트(Excecution Context) 내 렉시컬 환경(Lexical Environment)이 구성 될 때, 현재 실행컨텍스트 내에 있는 변수와 함수 선언을 모두 수집하여 식별자 정보로 등록한다.
- 실행 컨텍스트에 스코프 내의 식별자 정보를 미리 수집하는 전처리 과정을 '호이스팅' 이라고 한다.
호이스팅이 일어나는 이유
- 자바스크립트 엔진의 두 가지 역할
- 코드 평가
- 코드 실행
- 코드 평가 단계에서 실행할 코드에 대한 정보를 모두 수집함.
- 이 과정에서 자바스크립트 엔진은 모든 스코프(실행컨텍스트)를 탐색하며, 스코프의 변수 객체에 여러 식별자를 수집한다.
- 즉, 실행시점으로 넘어가기 전에 선언된 식별자에 대한 정보를 이미 수집해놓았기 때문에 실행 시점에서 스코프의 어느 지점이든 관련된 함수/변수를 참조 가능
- 그래서 호이스팅 과정이 꼭 필요함.
- 자바스크립트는 인터프리터 언어처럼 한 줄씩 읽어가며 실행을 하는데, 실행하기 직전에 컴파일(호이스팅)을 하는게 자바스크립트의 특징이다.
호이스팅이 일어나는 시점
- 실행 컨텍스트를 생성 할 때, 호이스팅이 작동한다.