호이스팅(hoisting)이란?

JBoB·2023년 1월 31일
0

🐧Hoisting(호이스팅)이란?

Hoisting(호이스팅) 이란 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는것.

Hoisting(호이스팅) 은 변수나 함수의 선언만 유효 범위의 최상단으로 옮기는 것

자바스크립트 엔진은 코드를 실행하기 전 실행 가능한 코드를 형상화하고 구분하는 과정(*실행 컨텍스트를 위한 과정)을 거친다.

실행 컨텍스트 란?

실행 가능한 코드가 실행되기 위해 필요한 환경을 의미하고 실행되기전 이러한 실행 컨텍스트 과정(코드를 구분하는 과정)을 거친다.

🐤변수 생성 단계

3가지 단계를 거쳐 변수를 생성한다.

  • 선언 단계(Declaration Phase) : 변수 객체를 실행 컨텍스트에 등록한다.
  • 초기화 단계(Initialization Phase) : 등록된 변수의 메모리를 확보한다. 이 단계에서는 변수는
    undefined 로 초기화된다.
  • 할당 단계(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)

: 선언단계와 초기화 단계 사이에 잠시 머물러 있는것

[출처](https://velog.io/@lee222/JS-TDZTemporal-Dead-Zone%EC%9D%BC%EC%8B%9C%EC%A0%81-%EC%82%AC%EA%B0%81%EC%A7%80%EB%8C%80%EB%9E%80)

참고:

https://nuhends.tistory.com/111

https://velog.io/@gml9812/호이스팅이-뭘까

profile
간절하고 치열하게 살자

0개의 댓글