-
호이스팅 - JavaScriptJavaScript 2024. 2. 25. 19:59
호이스팅이란?
인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 임포트(import)의 선언문을 해당 범위의 맨 위로 끌어올리는 것처럼 보이는 현상이다.
호이스팅은 선언문을 위로 올리고 할당은 호이스팅 하지 않는다.
예시
- var (불가능)
console.log(a); // undefined var a = 1;
- let (불가능)
console.log(a); // ReferenceError: Cannot access 'a' before initialization let a =1;
- const (불가능)
console.log(a); // ReferenceError: Cannot access 'a' before initialization const a =1;
여기서 var는 undefined가 나오고 let, const는 에러가 나온다.
그래서 let, const는 호이스팅이 안되는 거냐? 라고 하면 아니다 오류 메세지를 읽어보면
선언은 되있지만 초기화 전에는 접근이 불가능하다고 나온다.
- 함수 선언식 (가능)
a(); // Hello function a(){ console.log("Hello"); }
- 함수 표현식 (불가능)
a(); // ReferenceError: Cannot access 'a' before initialization const a =() =>{ console.log("Hello"); }
- 클래스 선언식 (불가능)
let a = new A("a"); // ReferenceError: Cannot access 'A' before initialization class A{ constructor(a){ this.a = a; } }
- 클래스 표현식 (불가능)
let a = new A("a"); // ReferenceError: Cannot access 'A' before initialization console.log(a); let A = class{ constructor(a){ this.a = a; } }
- import 문
let head = new Node(null); // ReferenceError: Cannot access 'Node' before initialization head.next = new Node(1); print(head); const {Node, print} = require("./codingTest/node");
결론
함수 선언식만 선언보다 사용을 먼저 해도 사용이 가능하다.
대부분은 먼저 선언과 할당 후에 사용해야 오류가 나지 않는다.
선언과 할당을 먼저 하고 그다음에 사용하도록 해야겠다.
'JavaScript' 카테고리의 다른 글
클로저(Closure) - JavaScript 공식문서 정리 (1) 2024.02.25 배열에 속성할당하기 (0) 2024.02.18