자바스크립트에서 변수란 값을 저장하기 위해 확보한 메모리 공간 자체 또는 메모리 공간을 식별하기 위한 식별자 입니다
변수를 선언하면 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 잇게 준비하는 것 입니다.
CPU에서는 연산을, 메모리에서는 기억을 담당하고 있다.
메모리(memory)는 데이터를 저장할 수 있는 메모리 셀(memory cell)의 집합체로, 메모리 셀 하나의 크기는 1byte(8bit)이며, 컴퓨터는 메모리 셀의 크기 단위(1byte)로 데이터를 저장하거나 읽어들입니다. 각 셀은 고유의 메모리 주소를 가지며, 이는 메모리 공간의 위치를 나타내고, 또한 메모리에 저장되는 모든 값은 2진수로 변환되어 저장됩니다.
변수: 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이다.
카멜 케이스: 모든 단어를 이어 쓰나, 첫 단어는 소문자로 시작하고 다음 단어부터 대문자로 시작한다.
파스칼 케이스: 모든 단어를 이어쓰고, 모든 단어의 첫 글자는 대문자이다.
자바스크립트의 모든 선언에는 호이스팅이 일어난다.
var 으로 선언한 변수는 값을 재할당 할 수 있다 재할당은 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것이다.
재할당은 변수에 저장된 값을 다른 값으로 변경한다. 그래서 변수라고 하는것이다. 만약 값을 재할당할 수 없다면 그것은 변수가 아닌 상수라 한다.
ES6에서 도입된 const 키워드는 변수 재할당이 금지된다.
변수에 값을 재할당 하면 score 변수의 값을 80 -> 90 으로 변경된다. 처음 할당되었던 공간은 지우고 그 메모리 공간에 재할당 값 90을 새로 저장하는것이 아니라 새로운 메모리 공간을 확보하고 그 메모리 공간에 숫자 값 90을 저장한다
score 변수의 이전 값인 undefined와 80은 어떤 변수도 값으로 갖고 있지 않다.(어떤 식별자와도 연결되어 있지 않다) 이것은 undefined와 80이 더이상 필요하지 않다는것이다. 이런 불필요한 값들은 가비지 콜렉터에 의해 메모리에서 자동 해제된다.
가비지 콜렉터: 애플리케이션이 할당한 메모리 공간을 주기적으로 검사해 더이상 사용되지 않는 메모리를 헤자하는 기능이다. JS는 가비지 콜렉터를 내장하고 있는 매니지드 언어로서 이를 통하여 메모리 누수를 방지한다.