Study/JavaScript

[JavaScript_study] 호이스팅 (Hoisting)

갈푸라떼 2022. 4. 14. 03:08

* 호이스팅(Hoisting)

  • 자바스크립트 엔진(번역기, Interpreter)이 코드를 실행하기 전, 변수, 함수, 클래스의 선언문을 끌어 올리는 것을 말함
  • 변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮김
  • 함수의 호이스팅은 함수의 선언문 전에 호출이 가능하게 해줌
  • 함수의 선언문은 선언 이전에도 호출이 가능함
  • 변수(let, const)와 클래스는 선언만 호이스팅이 되고, 초기화는 안된다.
    • 초기화 전, 변수에 접근하면 컴파일(빌드) 에러가 발생한다.

 

* 호이스팅(Hoisting) 예시 코드

print();

function print() {
  console.log('Hello');
}

// 변수(let, const)와 클래스는 선언만 호이스팅이 되고,
// 초기화는 안됨
// 초기화 전, 변수에 접근하면 컴파일(빌드) 에러가 발생

// console.log(hi);
let hi = 'hi';
let func1 = function () {};

// const cat = new Cat();
class Cat {}


let x = 1;
{
  console.log(x); // 블럭안에서만 호이스팅이 되어서 x라는 변수가 초기화가 되지 않았다는 오류가 발생이된다.
  let x = 2;
}