변수(varialbe)은 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말한다.
var a(변수명) = 10(변수값)
할당 : 변수에 값을 저장하는 것
식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다.
ex) 변수, 함수, 클래스 이름 모두 식별자
변수 선언 : 변수를 생성하는 것
자바스크립트 엔진은 변수 선언을 2단계에 걸쳐 수행한다.
선언 단계 : 변수 이름 등록
초기화 단계 : 값을 저장하기 위한 메모리 공간 확보, 암묵적으로 undefined를 할당해 초기화
+ 변수 이름은 어디에 등록되는가?
변수 이름을 비롯한 모든 식별자는 실행 컨텍스트에 등록된다!
console.log(score); // undefined
var score;
위 코드가 잘 출력되는 이유
변수 선언이 런타임(소스코드가 한줄씩 순차적으로 실행되는 시점) 이전에 먼저 실행되기 때문!
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라 한다.
변수 할당
var score; // 변수 선언
score=80 // 값의 할당
var score = 80; // 변수 선언과 값의 할당
위 두 코드는 동일하게 동작한다.
두번째 코드처럼 단축 표현해도 변수선언과 값의 할당을 2개의 문으로 나누어 실행한다.
변수 선언은 런타임 이전에 실행되지만 값의 할당은 런타임에 실행된다.
값을 처음 할당하거나 재할당할 때 기존에 메모리 공간을 지우고 할당하는 것이 아니라 새로운 메모리 공간을 확보하고 값을 할당한다.
→ 더 이상 사용되지 않는 메모리는 가비지 컬렉터에 의해 해제된다.