
변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리를 식별하기위해 붙인 이름이다. 즉 값의 위치를 가리키는 상적인 이름이다.
🤷♀️ 무슨말일까? 더 풀어서 공부해 보자.
메모리는 데이터를 저장할수 있는 메모리셀의 집합체로,
메모리 셀의 크기는 1바이트 단위로 데이터를 저장한다.
이때 메모리 셀은 각자 고유의 주소를 가지게 되는데
이를 메모리 주소라고 한다.
여기서 만약, 10 + 20 을 연산한다고 예를 들었을때
연산값으로 나오게된 30또한 메모리셀 한자리를 차지하게된다.
이때, 연산한 값 30을 재사용 하기위해서는 해당 메모리에
직접 접근을 해야하는데 메모리에 직접 접근한다는 것은
치명적인 오류를 발생시킬수 있음으로 매우 위험한 일이다.
그렇기 때문에 기억하고 싶은 값을 메모리에 저장하고,
저장된 값을 읽어들여 재사용 하기 위해 저장된 메모리 공간에
상징적인 이름을 붙인것을 변수라고 한다.

식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.
위의 이미지에서 식별자는 값이 아니라 메모리 주소를 기억하고있다.
즉, 식별자가 기억하고있는 메모리 주소를 통해 저장된 값에 접근 할 수
있다는 의미로, 메모리 주소에 붙인 이름이라고 할 수 있다.
변수는 메모리주소를 기억하고 있는 식별자이다.
메모리에 직접 접근하는것은 매우 위험한 일임으로 메모리 주소를 기억하고있는 변수를 통해 메모리에 저장된 값에 접근하여 재사용할 수 있다.
console.log(test) //undefined
var test; //변수선언
var test = 2; //값 할당
변수를 선언하면 undefined라는 값이 초기화되어 메모리공간에 저장되게 된다.
초기화된 변수에 값을 할당하게 되면 undefined가 저장된 메모리공간에
할당한 값이 덮어 씌어지는것이 아닌, 새로운 메모리공간에 저장 되게 된다.
값을 재할당 할때도 마찬가지다. 값이 할당된 메모리공간이 아닌 새로운 메모리공간에 저장된다.
그렇다면 재할당 하기전 메모리공간에 저장된 undefined, 처음 할당한 값을 어떻게 될까? 계속 메모리공간을 차지할까?
어떤 변수와도 연결되어있지 않은 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제 된다.
📌 가비지 콜렉터란?
애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더이상 사용되지 않는 메모리를 해제 하는 기능이다.
자바스크립트는 가비지 콜렉터를 내장하고 있는 언어로서 가비지 콜렉터를 통해 메모리 누수를 방지한다.