키워드 + 변수명 작성 ⇒ 메모리 공간 주소 할당 ⇒ 할당된 메모리의 이름을 변수명으로 등록 ⇒ 메모리 공간에 Undefined 할당
console.log(score) // ??
var score; // 변수 선언
일반적인 프로그래밍 언어라면 참조 오류가 발생해야 하지만, JS는 평가라는 과정이 있기 때문에 미리 코드에서 변수 선언을 포함한 모든 선언문들을 먼저 실행한 후(호이스팅), 남은 소스코드들을 한 줄 씩 처리한다.
변수에 새로운 값을 할당할 때 기존 메모리 주소를 버리고 새로운 메모리 공간을 할당하고 값을 저장한다.
기존에 할당된 메모리 공간에는 값이 남아있지만 어떤 식별자와도 연결되어 있지 않고, 가비지 콜렉터에 의해 메모리에서 자동으로 해제된다.
변수(식별자)의 이름을 선언할 때는 네이밍 규칙을 준수하여 만들어야 한다.
실행 컨텍스트 : JS 엔진이 소스코드를 평가하고 실행하기 위해 필요한 환경을 제공하고 코드의 실행 결과를 관리하는 영역이다.
garbage value : 초기화가 되지 않아 이전 애플리케이션에서 사용했던 의도하지 않은 값
호이스팅 : 인터프리터가 선언문이 있는 변수와 함수의 메모리 공간을 런타임 이전에 미리 할당하는 것
가비지 콜렉터 : 할당된 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능
언매니지드 언어 : 개발자가 명시적으로 메모리를 할당하고 해제할 수 있는 언어
매니지드 언어 : 개발자가 명시적으로 메모리를 할당하고 해제할 수 없는 언어
ReferenceError(참조 에러) : 현재 범위에서 존재하지 않거나 초기화되지 않은 변수를 참조했을 때 발생하는 에러