공부 및 일상기록

[Javascript] 호이스팅이란? 본문

개발/Javascript

[Javascript] 호이스팅이란?

낚시하고싶어요 2023. 1. 5. 23:20

호이스팅이란 코드가 실행하기 전 변수선언/함수선언이 해당 스코프의 최상단으로 끌어올려진것 같은 현상을 말합니다. 호이스팅이 발생하는 이유는 자바스크립트 엔진은 코드를 실행하기전 실행컨텍스트가 생성되는데 이 실행컨텍스트는 코드를 원활하게 실행될 수 있도록 환경을 만들어주는 역할입니다. 

 

실행 컨텍스트는 생성단계와 실행단계 두가지로 나눠볼수있습니다.

 

생성단계

선언문만 실행해서 환경레코드에 기록하는 단계입니다. 

 

실행단계

선언문 외 나머지 코드를 순차적으로 실행하는 단계입니다.

 

생성단계에서 선언문을 환경레코드에 기록하여 콜스택에 담아두게 되는데 이 현상때문에 호이스팅이 발생하게 됩니다.

 

 

var의 경우 선언과 동시에 undefined로 초기화 되기 때문에 선언 전에 사용하면 undefined가 환경레코드에 기록되어 아무 에러 없이 사용이 가능합니다.

let과 const의 경우 선언만 환경레코드에 기록이 되어 참조오류가 발생하는 것입니다.

또한 함수선언문으로 함수를 작성한 경우에도 완성된 함수 객체를 환경레코드에 기록해 두기 때문에 에러 없이 사용이 가능합니다.

 

 

참고하면 좋은 영상

https://www.youtube.com/watch?v=EWfujNzSUmw