간단용어

호이스팅, var 과 let 차이

WOOKTAE 2022. 1. 1. 22:11

호이스팅


JavaScript 에서 호이스팅 ( hoisting ) 이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미.

var 로 선언한 변수의 경우 호이스팅시 undefined 로 변수를 초기화 한다. 반면, letconst 로 선언한 변수의 경우 호이스팅시 변수를 초기화하지 않습니다. 

 

function catName(name) {
  console.log("제 고양이의 이름은 " + name + "입니다");
}

catName("호랑이");

/*
결과: "제 고양이의 이름은 호랑이입니다"
*/

기술 예제 : 일반적은 코드 사용 예제

catName("클로이");

function catName(name) {
  console.log("제 고양이의 이름은 " + name + "입니다");
}

/*
결과: "제 고양이의 이름은 클로이입니다"
*/

함수 호출이 함수 자체보다 앞서 존재하지만, 그럼에도 오류가 발생하지 않는다.

 

함수 호출이 함수 자체보다 앞서 존재하지만, 그럼에도 불구하고 이 코드 역시 동작합니다. 이것이 JavaScript에서 실행 맥락이 동작하는 방식입니다.

호이스팅은 다른 자료형과 변수에도 잘 작동합니다. 변수를 선언하기 전에 먼저 초기화하고 사용할 수 있는 것입니다


선언만 호이스팅 대상 

JavaScript는 초기화를 제외한 선언만 호이스팅합니다. 변수를 먼저 사용하고 그 후에 선언 및 초기화가 나타나면, 사용하는 시점의 변수는 기본 초기화 상태(var 선언 시 undefined, 그 외에는 초기화하지 않음)입니다. 예를 들어,

console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력
var num; // 선언
num = 6; // 초기화

반면, 다음 예제는 선언 없이 초기화만 존재합니다. 따라서 호이스팅도 없고, 변수를 읽으려는 시도에서는 ReferenceError 예외가 발생합니다.

console.log(num); // ReferenceError
num = 6; // 초기화

 

 

let 과 const 호이스팅

let과 const로 선언한 변수도 호이스팅 대상이지만, var와 달리 호이스팅 시 undefined로 변수를 초기화하지는 않습니다. 따라서 변수의 초기화를 수행하기 전에 읽는 코드가 먼저 나타나면 예외가 발생합니다.

 

'간단용어' 카테고리의 다른 글

자바스크립트 Math.max / Math.min  (0) 2021.04.17
스택(Stack), 큐(Queue)  (0) 2021.03.28
HashSet  (0) 2021.03.28
CompareTo  (0) 2021.03.28
TreeMap  (0) 2021.03.28