하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙힌 이름으로 값의 위치를 가리키는 상징적인 이름이다
변수 선언이란 변수를 생성하는 것을 말한다. 자세히는 값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확보된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것이다.
❗ 변수를 사용하려면 반드시 변수 선언이 필요하다.
❓ 변수를 선언한 이후, 변수에 값을 할당하지 않았을 때 어떻게 될까?
👉 변수 선언에 의해 확보된 메모리 공간은 비어 있을 것으로 생각할 수 있으나, 확보된 메모리 공간에는 자바스크립트 엔진에 의해 undefined값이 암묵적으로 할당되어 초기화된다.
❓ 메모리를 자동으로 할당한다고 했는데, undefined는 메모리를 얼마나 차지할까?
👉 알 수 없다. 값이 할당되었을 때 자료형에 맞게 메모리가 할당된다.
console.log(x); // undefined
var x; // 변수 선언문
💡 이유는 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 런타임 이전 단계에서 먼저 실행되기 때문이다.
이처럼 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라 한다.
❌ 하지만 변수 호이스팅은 자바스크립트의 장점이 아닌 특징으로 이렇게 사용하지 말자 !!
애플리케이션이 할당한 메모리 공간을 주기적으로 검사하여 더 이상 사용되지 않는 메모리를 해제하는 기능을 말한다. 더 이상 사용되지 않는 메모리란 간단히 말하자면 어떤 식별자도 참조하지 않는 메모리 공간을 의미한다. 자바스크립트는 garbage collector을 통해 메모리 누수를 방지한다.
어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다. 값이 아니라 값이 저장되어 있는 메모리 주소를 기억해야 한다.
❗ 식별자라는 용어는 변수 이름에만 국한해서 사용하지는 않는다
💡 변수,함수,클래스 등의 이름은 모두 식별자다. 즉, 메모리 상에 존재하는 어떤 값을 식별할 수 있는 이름은 모두 식별자라고 부른다.
❌ 선언하지 않은 식별자에 접근하면 ReferenceError(참조 에러)가 발생