카테고리 없음

[JavaScript] hoisting

코딩걈자 2022. 3. 23. 17:45
반응형

Hoisting

" 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것 "

 

  • 함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위의 최상단에 선언하는 것

 

  • 자바스크립트의 모든 선언에는 호이스팅이 일어남
    • let, const, class를 이용한 선언문은 발생하지않은 것 처럼 동작
    • var 변수 선언함수선언문에서 동작

🔔 함수표현식은 hoisting x

 

 

  • Parser가 함수 실행 전 해당 함수를 한번 훑음 
    • 자바스크립트 함수는 실행되기 전에 함수 안에 필요한 변수값들을 모두 모아서 유효 범위의 최상단에 선언
    • 정보를 기억하고 있다가 실행 

 

  • 실제 메모리나 코드의 변화는 x

 

변수 생성 단계 :  선언 -> 초기화 -> 할당

  • var로 선언한 변수는 호이스팅 시 undefined로 변수를 초기화함

 

  • let, const는 변수를 초기화하지 않기때문에 초기화전에 접근할 시에 참조 에러 발생
    • const는 재선언 재할당이 불가능하기 때문에 선언과 동시에 초기화가 필요함
    • 스코프의 시작에서 변수으 선언까지 일시적 사각지대(TDZ)에 빠지기 때문

🔔 일시적 사각지대(Temporal Dead Zone) : 스코프의 시작 지점부터 초기화 시작 지점까지의 구간