Search
Duplicate
♣️

Hoisting

: 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미
: var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화, 반면 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않음

기술 예제

: JavaScript는 함수의 코드를 실행하기 전에 함수 선언에 대한 메모리부터 할당, 덕분에 함수를 호출하는 코드를 함수 선언보다 앞서 작성할 수 있음
function catName(name) { console.log("제 고양이의 이름은 " + name + "입니다"); } catName("호랑이"); /* 결과: "제 고양이의 이름은 호랑이입니다" */
JavaScript
복사
위의 코드 블록이 일반적이라면 아래와 같이 함수를 선언하기 전에 호출하는 예제도 존재할 수 있음
catName("클로이"); function catName(name) { console.log("제 고양이의 이름은 " + name + "입니다"); } /* 결과: "제 고양이의 이름은 클로이입니다" */
JavaScript
복사
: 함수 호출이 함수 자체보다 앞서 존재하지만 그럼에도 불구하고 이 코드 역시 동작함, 이것이 JavaScript에서 애플리케이션 컨텍스트가 동작하는 방식

선언만 호이스팅 대상

: JavaScript는 초기화를 제외한 선언만 호이스팅함, 변수를 먼저 사용하고 그 후에 선언 및 초기화가 나타나면 사용하는 시점의 변수는 기본 초기화상태
console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력 var num; // 선언 num = 6; // 초기화
JavaScript
복사
반면 다음 예제는 선언 없이 초기화만 존재, 따라서 호이스팅이 발생하지 않으며 변수를 읽으려할 경우 ReferenceError 발생
console.log(num); // ReferenceError num = 6; // 초기화
JavaScript
복사

let과 const 호이스팅

: let과 const도 호이스팅 대상이지만 var와 달리 호이스팅 시 undefined로 변수를 초기화하지 않음, 즉 변수의 초기화를 수행하기 전 읽는 코드가 나타난다면 예외가 발생