JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다. 반면 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다. [MDN 호에스팅]
자바스크립트에서는 코드를 실행하기 전에 함수 선언에 대한 메모리 부터 할당한다.
function dogName(name){
console.log('제 강아지 이름은 " + name + "입니다.)
}
dogName('겨울이') // 제 강아지 이름은 겨울이 입니다.
dogName('겨울이') // 제 강아지 이름은 겨울이 입니다.
function dogName(name){
console.log('제 강아지 이름은 " + name + "입니다.)
}
함수를 먼저 실행시켜도 함수를 나중에 실행시켜도 자바스크립트에서는 선언될 당시 선언에 대한 메모리부터 할당하기에 둘다 동일한 출력값을 얻을 수 있다.
자바스크립트는 초기화를 제외한 선언만 호이스팅한다. 사용하는 시점에서 변수는 기본 초기화 상태(var 선언시 undefined, 그 외에는 초기화 하지 않음.)
console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력
var num; // 선언
num = 6; // 초기화
``````javascript
console.log(num); // ReferenceError
num = 6; // 초기화