변수란 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.
변수에 값을 저장 [할당] <----> 변수의 저장된 값을 읽는것 [참조]
변수이름을 식별자라고도 하는데 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.
(식별자는 값이 아니라 메모리 주소를 기억한다.)
undefined는 자바스크립트에서 제공하는 원시타입의 값이다. 변수에 아무값도 지정해주지 않고 선언하였을때 메모리에 이렇게 할당되어 초기화 된다.
자바스크립트 엔진은 변수선언을 2단계에 거쳐서 수행한다.
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라 한다. 그리고 var, let, const, function, function*, class 키워드를 사용해서 선언하는 모든 식별자(변수, 함수, 클래스 등)는 호이스팅 된다. 즉 모든 선언문은 런타임 이전 단계에서 먼저 실행되기 때문이다.
변수에 값을 할당할 때는 이전값 undefined가 저장되어 있던 메모리 공간을 지우고 그 메모리 공간에 할당 값 80을 새롭게 저장하는것이 아닌 새로운 메모리 공간을 확보하고 그곳에 값을 저장한다.
위의 과정을 통해 안쓰는 메모리 공간(어떤 식별자도 참조하지 않는 메모리 공간)은 가비지 콜렉터에 의해 메모리에서 자동 해제 된다.
네이밍 컨벤션