728x90
호이스팅
- 정의 : 함수, 변수의 선언이 마치 위로 끌어올려진 것처럼 동작하는 것을 이야기한다.
- 동작 이유 : JavaScript가 코드를 해석하고 실행하는 과정과 내부적인 변수의 선언, 할당 과정 때문이다.
- 동작 과정
- JavaScript는 코드를 실행하기 전에 먼저 선언된 변수, 함수 등을 전역 환경에 담아두게 된다.
- 이후에 정리된 코드를 실행하는 과정을 수행
변수 선언 단계
- 선언 단계
- 선언한 변수를 식별자가 담기는 객체에 할당하는 단계
- 초기화 단계
- 변수에 할당할 메모리 공간을 부여하는 단계
- 할당 단계
- 정의된 변수에 데이터가 할당되는 단계
TDZ ( Temporal Dead Zone )
- let 과 const 는 선언 단계와 초기화 단계가 분리되어 실행되고, 그 사이에 TDZ가 존재한다. 따라서 초기화 단계를 거치기 전에 해당 공간에서 변수를 참조하려 시도하면 참조 에러 ( Reference Error ) 를 발생시킨다.
- var 는 선언 단계와 초기화 단계가 함께 이루어진다. ( 변수를 변수명들이 담기는 전역 객체에 담아주는 과정과 해당 변수에 메모리 공간을 할당해주는 과정이 함께 수행된다.) 따라서 TDZ가 존재하지 않는다. 즉, undefined를 할당 받는다.
- 함수 표현식 방식은 TDZ의 영향을 받기 때문에 호이스팅이 발생하지 않는 것처럼 동작한다.
- 함수 표현식 방식 예) function aa(){}
- 함수 선언식 방식은 TDZ의 영향을 받지 않고 호이스팅의 영향을 받게 된다. 따라서 함수 그 자체가 끌어올려진 것처럼 동작한다.
- 함수 선언식 방식 예) const data = function(){}
728x90
'Language > Javascript' 카테고리의 다른 글
spread 연산자 (0) | 2023.03.21 |
---|---|
구조분해할당 (0) | 2023.03.21 |
DOM (0) | 2023.03.20 |
falsy 한 데이터 (0) | 2023.03.19 |
반복문 (0) | 2023.03.17 |