공부를 하던 도중, 아주 근원적인 부분에서 착각하고 있었던 것을 책을 보고 깨달아서 정리를 한다
var score;
score = 80;
위의 두 문(명령문) 은 변수의 선언과, 값의 할당이라고 하는 실행적인 의미를 지닌다.
이때, 리터럴 값인 80은 평가가 되어 2진수가 되며 타입과 함께 메모리 공간에 저장되고 이 메모리 공간을 칭하는 식별자가 바로 score이 된다.
var의 특징은 처음 변수 선언이 시작될 때, 즉 메모리 공간이 확보가 되고 그 메모리 공간을 score이라는 명칭으로 칭하게 될 때 이미 내부에 "undefined"의 값으로 초기화가 된 상태이다.
그리고 나서 할당문 "score = 80" 이 런타임때 실행되는 순간 해당 score이 가리키는 메모리 공간을 비우고 거기에 80을 넣는 것이 아니라 새로운 공간을 확보하고 거기에 80이 저장된 후, 그 메모리 공간으로 score이라는 식별자 포인터가 이동한다 (중요)
만약
var score;
score = 80;
score = 90;
위와 같은 상황이라면, score 식별자 포인터는 undefined => 80 => 90 와 같이 각각 공간이 확보되어 저장된 값들에 대해서 포인팅하는 대상이 달라지게 된다.
마지막으로 메모리 공간이 확보가 되어 90이라는 값이 평가된 2진수가 저장이 된 그 공간을 score 포인터가 지칭하게 되므로,
나머지 undefined, 80의 2진수 평가값이 저장된 메모리 공간은 더이상 어떤 식별자도 marking 하고있지 않게 된다.
이때 이 두 메모리 공간은 GC의 수거대상이 되어 빠져지고 메모리 공간이 다시 확보되는 원리로 되어있다.
이처럼 개발자가 메모리 공간을 관리하지 않는 언어를 unmanaged language라고 한다.
값이란 특정 문구(문, 명령문) 가 평가가 되어 생성된 결과를 말한다.
이때의 결과는 원시타입( String, Number, Boolean, Undefined, Null, Symbol) 와, 객체타입 ( Object, Function, Array ) 중 한가지의 타입을 가진
결과물이 된다.
표현식이란 위와 같이 평가가 되어 특정한 타입의 값을 만들어낼 수 있는 문구를 의미한다.
문이란, 컴퓨터에게 명령을 내릴 수 있는 최소의 토큰 결합 단위를 뜻한다. 여기서 토큰이란 자바스크립트 코드가 파싱되면서 만들어질 때 가장 최소 단위로 쪼개지는 단위를 의미한다. 즉,
var score;
위의 문은 var이라는 토큰과, score이라는 토큰이 모여 "메모리 공간을 확보하고, undefined를 채워넣은 뒤, 그 메모리 공간을 score라는 포인터로 가리켜라" 라는 컴퓨터에게 명령을 내릴 수 있는 최소 단위가 된다. 이 최소 단위를 문이라고 한다.