myNumber라는 식별자는 값 23를 식별 할 수 있어야함.
myNumber는 23이 저장되어 있는 메모미 주소
를 기억함.
(여기선 (0012CCGWH80))
메모리 상 존재하는 어떤 값을 식별할 수 있는 이름을 --> 식별자 라고한다.
var 키워드 단점
블록 레벨 스코프를 지원하지 않음.
함수 레벨 스코프를 지원
var person
변수 선언문은 변수 이름을 등록
/ 값을 저장할 메모리 공간 확보
함.
undefined
값이 할당되어 초기화자바스크립트 엔진은 변수 선언 -> 2단계를 거친다.
선언 단계 : 변수 이름을 등록해서 자바스크립트 엔진에 변수의 존재를 알린다.
초기화 단계 : 값을 저장하기 위한 메모리 공간을 확보하고 암묵적으로 undefined를 할당해 초기화한다.
var person
암묵적으로 undefined를 할당
초기화진행변수 실행시점과 호이스팅
변수 호이스팅
console.log(person); //undefined
var person; //변수 선언문
인터프리터에 의해 한 줄 씩 순차적으로 실행된다.
ReferenceError가 발생하지 않음 --> undefind가 출력된다.
변수 선언(선언 단계 & 초기화 단계)는 소스코드가 한 줄씩 순차적으로 실행되는 시점 -> 런타임이아니라 그 이전 단계에서 먼저 실행되기 때문이다.
자바스크립트 엔진은 소스코드를 한 줄씩 실행하기 앞 서,
소스 코드의 평가
과정을 거치면서 소스코드 실행을 위한 준비를 한다.정리
변수 선언과 값의 할당은 실행시점이 다르다!
var person = "Jihwan" // 변수 선언과 값의 할당을 한 문장으로 표현
변수 선언 : 런타임 이전에 먼저 실행
값의 할당 : 런타임에 실행
런타임 에러 : 컴파일과정을 마친 프로그램은 사용자에 의해 실행되어 지며, 이러한 응용프로그램이 동작되어지는 때를 런타임(Runtime)이라고 부른다.
컴파일 에러 : 컴파일 타임 에러는 프로그램이 성공적으로 컴파일링되는 것을 방해하는 신택스에러(Syntax error)나 파일참조 오류와 같은 문제를 말한다.
컴파일 --> 런타임 순서로 진행된다.
// Example
console.log(person); // undefined
var person = "JIhwan"; // 변수 선언 & 값의 할당
console.log(person); // YOUNG MIN
var 키워드로 선언한 변수는 선언과 동시에 undefined로 초기화 되어있던 값에서 값의 할당 과정에서 JIhwan
으로 재할당
됐다.
결과적으로 재할당까지 적용되었을 경우, 이전 값인 undefined나 Jihwan은 어떤 변수도 값으로 갖고 있지 않게 된다.
==> 어떠한 식별자와도 연결되어 있지 않다는 뜻.
==> 이러한 불필요한 값들은 가비지 콜렉터(Garbage collector) 에 의해 메모리에서 자동 해제 된다. ( 단, 언제 해제될지는 예측 불가능)