자바스크립트 엔진은 변수 선언을 2단계에 거쳐 수행한다
실행 컨택스트란?
자바스크립트 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 실제로 관리하는 영역으로 자바스크립트 엔진은 실행 컨텍스트를 통해 식별자와 스코프를 관리
나중에 컨텍스트 단원에서 자세히 알아볼 듯
var 키워드를 사용한 변수 선언은 선언 단계와 초기화 단계가 동시에 진행된다. var score;는 선언 단계를 통해 변수 이름 score를 등록하고, 초기화 단계를 통해 score 변수에 암묵적으로 undifined를 할당해 초기화다
일반적으로 초기화란 변수가 선언된 이후 최초로 값을 할당하는 것을 말한다
만약 초기화 단계를 거치지 않으면 확보된 메모리 공간에는 이전에 다른 애플리케이션이 사용했던 값이 남아 있을 수 있다 - 쓰레기 값
이는 변수 선언이 소스코드가 순차적으로 실행되는 런타임 이전 단계에서 먼저 실행된다는 증거로 호이스팅가 있는 이유다
console.log(score); // undefined
var score; // 1. 변수 선언
score = 80; // 2. 값의 할당
console.log(score); // 80
console.log(score); // undefined
var score = 80; // 1. 변수 선언과 값의 할당
console.log(score); // 80