해당 게시글은 '모던 자바스크립트 Deep Dive' 책을 토대로 작성하였습니다. |
변수란
- 변수는 값을 저장하기 위해 확보한 메모리 공간 자체를 의미한다.
식별자
- 변수 이름을 식별자라고도 한다.
- 식별자는 값이 아닌 메모리 주소를 기억하고 있다.
- 메모리 주소를 통해 메모리 공간에 저장된 값에 접근한다.
- 변수, 함수, 클래스 등 어떤 값을 구별해서 식별할 수 있는 고유한 이름을 모두 식별자라고 부른다.
자바스크립트의 변수 선언
- 변수 선언 시 var, let, const 키워드를 사용한다.
- ES6에서 let, const 키워드가 도입되기 전까지는 var 키워드로 변수를 선언하였다.
- ES6로 넘어오면서 let, const 키워드 사용을 권장한다.
var score;
- 위 코드블록을 살펴보면 변수를 선언 후, 변수에 값을 해당하지 않아 비어있는 것 같이 보일 수 있으나
- 확보된 메모리 공간에는 자바스크립트 엔진에 의해 undefined 라는 값이 암묵적으로 할당되어 초기화된다.
- undefined 는 자바스크립트에서 제공하는 원시 타입의 값이다.
- 자바스크립트의 독특한 특징이다.
변수 선언의 실행 시점과 변수 호이스팅
console.log(score);
var score;
- 자바스크립트는 인터프리터에 의해 한줄씩 실행되므로 해당 코드를 실행 시 참조 에러(ReferenceError)가 발생할 것처럼 보인다.
- 하지만 참조 에러 대신 undefined 가 출력된다.
- 변수 선언이 런타임이 아닌, 그 이전 단계인 소스코드 평가과정에서 먼저 실행되기 때문이다.
- 소스코드 실행을 위한 평가과정에서 자바스크립트 엔진은 변수 선언을 포함한 모든 선언문(변수, 함수)를 찾아 먼저 실행한다.
- 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 특징을 변수 호이스팅이라고한다.
값의 할당
var score = 1;
- 변수 선언과 값의 할당의 실행 시점이 다르다.
- 변수 선언은 런타임 이전인 평가과정에서 실행되지만, 값의 할당은 런타임에 실행된다.