변수는 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 뜻함
즉 값의 위치를 가리키는 상징적인 이름
식별자는 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 말한다. 그러므로 식별자는 값이 아니라 메모리 주소를 기억하고 있다.
값을 저장하기 위한 메모리 공간을 확보하고 변수 이름과 확모된 메모리 공간의 주소를 연결해서 값을 저장할 수 있게 준비하는 것이다. 확보 해제되기 전까지는 누구도 확보된 메모리 공간을 사용할 수 없게 보호되어 안전한 사용이 가능하다.
변수를 선언할 때는 var, let, const 키워드가 사용됨
자바스크립트 엔진은 변수 선언을 선언 단계, 초기화 단계로 2단계에 수행
선언 단계: 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화 한다. 초기화 하지 않을 시 이전 다른 어플리케이션에서 사용한 쓰레기값이 할당될 수 있다.
변수 선언의 실행 시점 = 런타임이 아닌 그 이전 단계
소스코드 실행을 위한 준비 단계인 소스코드의 평가 과정에서 자바스크립트 엔진은 변수 선언을 포함한 모든 선언문을 소스코드에서 먼저 찾아내 먼저 실행
호이스팅: 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징
consle.log(score);
var score;
이러한 이유로 선언문이 호출문 아래 있어도 참조에러가 아닌 undefined가 출력된다.
대입, 저장과 같은 개념이며 연산자는 =를 사용
consle.log(score); // underfind가 출력
var score = 80; // 변수 선언과 값의 할당
consle.log(score); // 80 출력