[TIL] 호이스팅이란

Leesu·2023년 2월 26일
0

[TIL] : Today I Learned

목록 보기
8/21

자바스크립트의 호이스팅에 대해 알아보려한다.

호이스팅이란?

JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다. 반면 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.

즉, 변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는 것,

함수와 변수는 코드를 실행하기 전에 실행 컨텍스트를 위해 메모리에 저장되는 것이다.

- 특징

  1. Javascript 는 코드를 실행하기 전에, 실행 컨텍스트를 위한 과정에서 모든 선언에 대한 메모리부터 할당하게 된다.
    따라서 코드 실행 전 이미 변수선언/함수선언이 저장되어있기 때문에 선언문보다 참조,호출이 먼저 나와도 오류없이 동작하는 것이다.

  2. JavaScript 는 초기화를 제외한 선언만 호이스팅한다.
    변수를 사용하고 그 후에 선언 및 초기화가 나타나면,
    사용하는 시점이 변수는 기본 초기화상태(var 선언시 undefined,그 외에는 초기화하지 않음) 이다.

  • 예를들어,
    console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력
    var num; // 선언
    num = 6; // 초기화
  • 반면 다음 코드는 선언없이 초기화만 존재하고있는데, 이때문에 호이스팅도 없고 변수를 읽으려는 시도에서 ReferenceError 에러가 발생한다.
    console.log(num); // ReferenceError
    num = 6; // 초기화

- 변수 생성 단계

  1. 선언 단계
  • 변수를 실행 컨텍스트의 객체에 등록한다.
  • 이 변수 객체는 스코프가 참조하는 대상이 된다.
  1. 초기화 단계
  • 변수 객체에 등록된 변수를 위한 공간을 메모리에 확보한다.
  • 이 단계에서 var 변수는 undefined 로 초기화된다.
  1. 할당 단계
  • undefined 로 초기화된 변수에 실제 값을 할당한다.

참고문서_1
참고문서_2

profile
기억력 안 좋은 FE 개발자의 메모장

0개의 댓글