✏️ 스코프, 호이스팅, TDZ
스코프
- 자바스크립트의 스코프는 함수 레벨 스코프를 따른다.
- 같은 함수 레벨에 존재하면 값을 참조할 수 있다는 건데
ES6에서 let 키워드가 도입되면서 블록 레벨 스코프를 사용할 수 있게 됐다.
호이스팅
- 함수의 코드를 실행하기 전에 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것.
- 초기화를 제외한 선언만 호이스팅.
- 그렇기 때문에 선언, 정의된 코드보다 호출하는 코드를 먼저 배치할 수 있음.
- 변수의 선언과 초기화를 분리.
- 변수의 선언을 코드의 최상단으로 끌어올림.
TDZ
- TDZ의 영항을 받는 구문 const, let, class
- 변수 스코프의 맨 위에서부터 ~ 변수의 초기화 완료 시점까지의 변수는 TDZ에 들어간 변수
- 코드의 작성 순서(위치)가 아니라 코드의 실행 순서(시간)에 의해 형성
✏️ 함수 선언문과 함수 표현식에서 호이스팅 방식의 차이
함수 선언문
: 함수명이 정의되어 있고, 별도의 할당 명령이 없는 것
함수 표현식
: 정의한 function을 별도의 변수에 할당하는 것
호이스팅 방식의 차이
- function name() : 함수 선언문
- let name = function() : 함수 표현식
- var,함수 선언문은 호이스팅 대상,let,const,함수표현식은 대상이 아니다.