[JavaScript] 모던 자바스크립트 Deep Dive 4장 - 변수

4.1 변수란 무엇인가? 왜 필요한가?
변수는 프로그래밍 언어에서 데이터를 관리하기 위한 핵심 개념으로 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름. 즉, 값의 위치를 가리키는 상징적인 이름
- 변수이름: 메모리 공간에 저장된 값을 식별할 수 있는 고유한 이름
- 변수 값: 변수에 저장된 값
- 할당: 변수에 값을 저장하는 것
4.2 식별자
어떤 값을 구별해서 식별할 수 있는 고유한 이름 = 변수 이름
값이 아니라 메모리 주소를 기억
4.3 변수 선언
변수를 생성하는 것. var, let, const 키워드를 사용
* 키워드: 자바스크립트 코드를 해석하고 실행하는 자바스크립트 엔진이 수행할 동작을 규정한 일종의 명령어
* undefined: 자바스크립트에서 제공하는 원시 타입의 값
자바스크립트 엔진의 변수 선언
- 선언단계: 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알림
- 초기화 단계: 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화
* 만약 초기화 단계를 거치지 않으면 확보된 메모리 공간에는 쓰레기 값이 있을 수 있다. var 키워드는 암묵적으로 초기화를 수행
4.4 변수 선언의 실행 시점과 변수 호이스팅
console.log(score); // undefined
var score; // 변수 선언문
변수 호이스팅: 변수 선언문이 코드의 선두로 끌어 올려진 것 처럼 동작하는 자바스크립트 고유의 특징
* ReferenceError가 아닌 undefined이 출력되는 이유: 자바스크립트 엔진은 변수 선언이 소스코드의 어디에 있든 상관없이 다른 코드보다 먼저 실행
4.5 값의 할당
할당 연산자 = 를 사용
var score = 80; // 변수 선언과 할당
console.log(score); // undefined
var score = 80; // 변수 선언과 값의 할당
console.log(score); // 80
자바스크립트 엔진은 변수의 선언과 값의 할당을 2개의 문으로 나누어 각각 실행한다.
변수선언은 런타임 이전. 값의 할당은 런타임에 실행
4.6 값의 재할당
var score = 80; // 변수 선언과 값의 할당
score = 90; // 값의 재할당
재할당은 현재 변수에 저장된 값을 버리고 새로운 값을 저장하는 것
값을 재할당할 수 없어서 저장된 값을 변경할 수 없다면 변수가 아니라 상수(const 키워드)이다.

4.7 식별자 네이밍 규칙
1. 식별자는 특수문자를 제외한 문자, 숫자, 언더스코어( _ ), 달러 기호($)를 포함할 수 있다.
2. 단, 식별자는 특수문자를 제외한 문자, 언더스코어( _ ), 달러 기호($)로 시작해야 한다. 숫자로 시작하는 것은 허용하지 않는다.
3. 예약어는 식별자로 사용할 수 없다.
