모던 자바스크립트 Deep Dive : 4장

jaejin·2024년 1월 21일

4.3 변수선언

  • 변수가 선언되면 확보된 메모리 공간에는 자바스크립트 엔진에 의해 undefined라는 값이 암묵적으로 할당되어 초기화된다.
  • 변수 선언은 선언 단계초기화 단계로 이루어진다.
  • 선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
  • 초기화 단계 : 값을 저장하기 위해 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.

4.4 변수 선언의 실행 시점과 변수 호이스팅

변수 선언은 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 먼저 실행된다.

따라서 변수 선언이 소스코드의 어디에 위치하는지와 상관없이 어디서든지 변수를 참조할 수 있다.

이처럼 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅(variable hoisting)이라 한다.

📌 const, let 호이스팅

이 부분은 책에는 쓰여져있지 않은 부분인데 이렇게만 쓰면 헷갈릴 것 같아서 정리하는 부분이다.

const, let도 호이스팅되기 때문에 마치 변수 선언의 위치와 상관없이 어디서든지 변수를 참조할 수 있는 것처럼 생각할 수 있지만 const, let 키워드로 선언된 변수는 TDZ(Temporal Dead Zone)의 영향을 받기 때문에 변수 선언부의 위쪽에서 해당 변수를 사용하려고 하면 ReferenceError가 발생한다.

let 키워드로 선언된 변수의 초기화 단계는 변수 선언문에 도달했을 때 실행된다. 따라서 변수 선언문에 도달하기 전에는 값을 저장하기 위한 메모리 공간이 확보되지 않아 변수에 접근할 수 없다.

const 키워드는 선언과 할당이 동시에 이루어져야 하므로 당연히 변수 선언문 이전에 변수에 접근할 수 없다.

4.6 값의 재할당

변수에 값을 재할당하면 새로운 메모리 공간을 확보하고 그 메모리 공간에 새로운 값을 저장한다. 이전의 메모리 공간은 어떤 식별자와도 연결되지 않아 불필요한 값이 되고 가비지 콜렉터에 의해 메모리에서 자동 해제된다. 단, 메모리에서 언제 해제될지는 예측할 수 없다.

가바지 콜렉터(garbage collector)

  • 애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능
  • 메모리 누수를 방지한다.
profile
jjlabsio

0개의 댓글