console.log(score);
var score;
변수 선언문보다 변수를 참조하는 코드가 앞에 있는 경우 : 자바스크립트 코드는 인터프리터에 의해 한 줄씩 순차적으로 실행됨
→ console.log(score)가 가장 먼저 실행됨
→ 순차적으로 다음 줄에 있는 코드를 실행함
- console.log(score)가 실행되는 시점에는 아직 score변수의 선언이 실행되지 않았음으로 참조 에러가 발생할 것으로 보인다
- 그러나 참조 에러가 발생하지 않고 undefined 가 출력된다
→ 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점, 즉 런타임이 아니라 그 이전 단계에서 실행되기 때문
자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기에 앞서 먼저 소스코드의 평가 과정을 거침
→ 소스코드 실행을 위한 준비 단계인 소스코드의 평가 과정에서 자바스크립트 엔진은 변수 선언을 포함한 모든 선언문 (변수 선언문, 함수 선언문 등) 을 소스코드에서 찾아내 먼저 실행한다
→ 이 과정이 끝나면 비로소 변수 선언을 포함한 모든 선언문을 제욓사고 소스코드를 한 줄씩 순차적으로 실행하는 것이다.
💡 자바스크립트 엔진 : 변수선언이 소스코드의 어디에 있든 상관없이 다른 코드보다 먼저 실행됨. → 변수 선언이 소스코드 어디에 위치하는지와 상관없이 어디서든지 변수를 참조할 수 있음
변수 선언문인 var score; 보다 변수를 차조하는 코드인 console.log(score);가 앞에 있음
만약 코드가 순차적으로 실행되는 런타임에 변수 선언이 실행된다면?
→ console.log(score);가 실행되는 시점에는 아직 변수가 선언되기 이전임
→ 위 코드를 실행하면 참조 에러가 발생해야 하는데 그냥 undefined가 출력됨
→ 이는 변수 선언이 소스코드가 순차적으로 실행되는 런타임 이전 단계에서 먼저 실행된다는 증거이다.
호이스팅
→ 이처럼 변수 선언문의 코드의 앞부분으로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징
→ var, let, const, function, function*, class 키워드를 사용해서 선언하는 모든 식별자는 호이스팅된다.
'2023 공부한것들' 카테고리의 다른 글
[4-6] 값의 재할당, 가비지 콜렉터, 언매니지드언어/매니지드 언어 (0) | 2023.06.30 |
---|---|
[4-5] : 값의 할당 (0) | 2023.06.30 |
[4-3] 변수 선언 (0) | 2023.06.28 |
[코딩애플 html/css] 11강: position과 좌표 레이아웃 만들기 (0) | 2023.06.28 |
20230628 오전 회고 (0) | 2023.06.28 |