이번엔 변수 선언과 호이스팅에 대해 설명해보겠담
📌 변수호이스팅
변수를 참조하는 코드가 변수를 선언하는 코드보다 먼저 나와도 변수 선언문이 코드의 선두로 끌어올려진 것처럼 동작하는 것을 말한다.
예를들어 변수 선언문 보다 변수를 참조하는 코드가 먼저 나와도 참조에러가 발생하지 않고
변수가 선언된 것처럼 선두로 끌어올려져 동작하는 것을 말한다.
console.log(score); //변수 참조(참조: 변수에 저장된 값을 읽어들이는 것)
var score; // 변수선언
따라서 위의 코드는 참조에러가 아니라
변수가 선언되고 초기화단계까지 되어 undefined 로 결정이 되는 것이다.
그런데 이때 변수 선언은 런타임 이전에 먼저 실행이 되지만
값의 할당은 순차적으로 실행이 되는 런타임에 실행이 된다.
따라서 변수에 undefined 할당이 되었다가 얘한테 값을 할당해주면 이전에 있던 undefined 가 메모리 공간을 지우고 새롭게 값을 할당하는 것이 아니라 새로운 메모리 공간을 확보하고 그곳에 할당값 80을 저장한다.
console.log(score); /// undefined
score = 80; // 값의 할당
var score; // 변수 선언
console.log( score) ; // ??
이 ? ? 에는 무엇이 들어갈까 ?
정답은 80이다.
- 첫번째 console.log (score) ; score 가 선언만 되었기 때문에 초기화단계를 거쳐 undefined
- score = 80 은 score 에 값 할당
- var score 는 변수를 선언하지만 이미 이전에 선언이 되었기 때문에 그냥 아무런 영향이 없다.
- 마지막 console.log(score) 는 이미 80이 할당된 score 변수를 출력하기 때문에 80 출력
'Deep Dive 정리' 카테고리의 다른 글
[JS Deep Dive] 10장 -객체리터럴 (1) | 2024.08.27 |
---|---|
[JS Deep Dive] 2장 - 자바스크립트란? (0) | 2024.08.22 |
[JS Deep Dive] 6장 - 데이터타입 (0) | 2024.08.22 |
[JS Deep Dive] 4장 변수(1) (0) | 2024.08.21 |
[JS Deep Dive] 8장 조건문 if-else와 switch (0) | 2024.08.21 |