할당(assignment)
: 변수에 값을 저장하는 것. (대입, 저장)참조(reference)
: 변수에 저장된 값을 읽어 들이는 것.식별자(identifier)
: 어떤 값을 구별해서 식별할 수 있는 고유한 이름으로, 값이 아니라 메모리 주소를 기억한다. 즉, 메모리 주소에 붙인 이름이다. (변수명, 함수명, 클래스명 등)선언(declaration)
: 변수를 생성하는 것. 즉, 값을 저장하기 위한 메모리 공간을 확보(allocate)하고 변수명과 확보된 메모리 공간의 주소를 연결(name binding)해서 값을 저장할 수 있게 준비하는 것.var
: 선언 단계와 초기화 단계가 동시에 진행되는 키워드 (재선언 가능)let
: 재선언 불가, 재할당 가능한 키워드const
: 값을 재할당 할 수 없는 상수(constant) 키워드console.log(score); // undefined
var score;
score = 80;
console.log(score); // 80
변수 선언문보다 변수를 참조하는 코드가 먼저 있어서 참조 에러가 발생할 것 처럼 보이지만, 참조 에러가 발생하지 않고 undefined가 출력된다. 그 이유는 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점인 런타임(runtime)이 아니라 이전 단계에서 먼저 실행되기 때문이다.
값의 할당과 재할당은 런타임에 실행되며, 기존 undefined가 저장되던 공간이 아닌 새로운 메모리 공간 확보 후 저장된다. 이후 사용하지 않는 값은 가비지 콜렉터에 의해 자동으로 해제된다.
자바스크립트 엔진은 소스코드를 한 줄씩 실행하기 앞서 소스코드의 평가 과정을 먼저 거치면서 실행 준비를 한다. 이 때, 모든 선언문을 소스코드에서 찾아서 먼저 실행한다. 평가 과정이 끝난 후, 선언문을 제외한 소스코드를 순차적으로 실행한다.
var firstName; // 카멜 케이스 : 주로 변수, 함수에 사용
var first_name; // 스네이크 케이스
var FirstName; // 파스칼 케이스 : 주로 생성자 함수, 클래스에 사용
var strFirstName; // 헝가리안 케이스
| 참고 자료 |
모던 자바스크립트 Deep Dive