Gapus Dev Blog

[자바스크립트] 호이스팅 본문

프론트엔드/JavaScript

[자바스크립트] 호이스팅

Gapus 2023. 10. 19. 18:20
  • JS파서 중 내부적으로 끌어올려지는 JS 특징이다.
  • 컴파일 단계에서 var, let, const, function, class의 선언을 스캔하여 레티컬 환경이라는 메모리에 저장한다.
  • 변수 생성 단계를 거치며 변수를 생성한다.
    • 선언(Declaration) - 스코프와 변수 객체가 생성되고, 스코프가 변수 객체를 참조한다. 
      초기화 전까지는 TDZ(Temporal Dead Zone) 상태이다.
      • TDZ란? 초기화 전 메모리에 할당되지 않는 구간을 말하며,  참조 에러(ReferenceError)가 발생한다.
    • 초기화(Initialization): 변수 객체 값을 위한 공간을 메모리에 할당한다. 이 때 할당되는 값은 undefined다.
    • 할당(Assignment): 변수 객체에 값을 할당한다.
  • var은 선언과 동시에 undefined로 초기화가 이뤄지며 TDZ이 없다.
  • let, const는 선언을 하고 TDZ에 들어가며 초기화되지 않는 상태를 유지한다.
  • 함수선언식은 호이스팅이 되고, 함수표현식은 호이스팅이 안된다.
  • 클래스선언식은 호이스팅이 되지만 TDZ에 들어간다. 클래스표현식은 호이스팅이 안된다.

 

참고출처https://velog.io/@1nthek/JavaScript-%EB%B3%80%EC%88%98%EC%99%80-%ED%95%A8%EC%88%98-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85Hoisting%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90