[JS] #1 변수

홍민기·2022년 9월 30일
0

JS

목록 보기
1/5

4.3 변수 선언

자바스크립트 엔진은 변수 선언을 다음과 같은 2단계에 거쳐 수행한다.

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

변수 이름을 비롯한 모든 식별자는 실행 컨텍스트에 등록된다. 실행 컨텍스트는 자바스크립트 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역이다. JS엔진은 실행 컨텍스트를 통해 식별자와 스코프를 관리한다.
변수 이름과 변수 값은 실행 컨텍스트 내에 키/Value 형식인 객체로 등록되어 관리된다. JS 엔진이 변수를 관리하는 매커니즘은 후에 "스코프"와 "실행 컨텍스트"에서 자세히 살필 예정이다.



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

자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기에 앞서 먼저 소스코드의 평가 과정을 거쳐서 소스코드를 실행하기 위한 준비를 한다. 이때 소스코드 실행을 위한 준비 단계인 소스코드의 평가 과정에서 JS엔진은 변수 선언을 포함한 모든 선언문을 코드에서 찾아 먼저 실행한다. 그리고 소스코드의 평가 과정이 끝나면 비로소 변수 선언을 포함한 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행한다.
예를 들어,

console.log(score);
var score;

이라는 코드가 있다면 undefined가 출력된다. 이는 변수선언이 소스코드가 순차적으로 실행되는 런타임 이전 단계에서 먼저 실행된다는 증거이다. 이처럼 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅 이라고 한다.



4.6 값의 재할당

변수에 값을 재할당하게 되면 이전 값이 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 재할당 값을 새롭게 저장하는 것이 아니라 새로운 메모리 공간을 확보하고 그 메모리 공간에 값을 저장한다. 따라서 이전 값들은 더이상 어떤 변수도 값으로 갖고 있지 않다. 다시 말해, 어떤 식별자와도 연결되어 있지 않다. 이러한 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제 된다. 단, 메모리에서 언제 해제될지는 예측할 수 없다.

profile
안녕 :P

0개의 댓글