- 0
- 2
인터프리터 언어인 자바스크립트에서 어떻게 호이스팅이 가능한지에 대해서 설명해주세요.
답변 확인
자바스크립트에서 호이스팅(Hoisting)
- 자바스크립트에서 호이스팅(Hoisting) 은 변수, 함수, 클래스의 선언이 코드 실행 전에 해당 범위의 최상단으로 끌어올려지는 것처럼 동작하는 메커니즘입니다. 실행 전 선언만 메모리에 등록되기 때문에 발생합니다.
1. 변수의 호이스팅
var
: 선언만 호이스팅되며, 초기화는 호이스팅되지 않음. 초기화 이전 접근 시undefined
반환.
console.log(a); // undefined
var a = 10;
console.log(a); // 10
let
,const
: TDZ(Temporal Dead Zone) 가 존재. 초기화 전에 접근하면ReferenceError
발생.
console.log(b); // ReferenceError
let b = 20;
2. 함수의 호이스팅
- 함수 선언
(function)
: 선언 전체가 호이스팅되며, 선언 이전에 호출 가능.
greet(); // "Hello, world!"
function greet() {
console.log('Hello, world!');
}
- 함수 표현식(var, let, const): 변수처럼 동작. 선언만 호이스팅되고 초기화 전에 호출 시 오류 발생.
console.log(sayHi); // undefined
sayHi(); // TypeError: sayHi is not a function
var sayHi = function () {
console.log('Hi!');
};
요약
-
1. 호이스팅이 가능한 이유: 실행 전에 코드 구조를 파싱하여 변수와 함수의 선언을 메모리에 등록하기 때문.
-
2.키워드별 동작:
var
: 선언만 호이스팅, 초기화는 나중에 이루어짐.let
,const
: TDZ로 인해 초기화 전 사용 불가.- 함수 선언: 전체 호이스팅.
- 함수 표현식/클래스: 변수처럼 동작하며 TDZ 적용.
- TDZ(Temporal Dead Zone): 선언부터 초기화 전까지의 구간으로, 이때 변수나 클래스를 참조하면
ReferenceError
발생.
-
자바스크립트는
인터프리터 언어
이지만, 코드를 한 줄씩 바로 실행하지 않고 컴파일 단계를 먼저 거칩니다. 이로 인해 선언 위치와 상관없이 변수를 사용할 수 있는 유연성이 제공됩니다.
Top comments (2)
- DavidYang2월 19일
우와 댓글이다~
- Olivia2월 19일
오오 ~~ :) 너무 글 좋네용