함수의 두 가지 리터럴
- 함수선언
- 함수 선언은 function 키워드 뒤로 함수의 이름을 적어서 사용
- 코드를 실핼할 때 함수를 포함하는 스코프 최상단으로 끌어 올려짐
function test(){}
- 함수 표현식
- 함수 표현식은 function 키워드 뒤로 이름을 적지 않고 사용. 이름이 없기 때문에 익명 함수라고 부름.
- 변수를 통해서 함수를 참조하기 때문에 호이시틍이 일어나지 않습니다.
let test = function(){}
변순 선언 역시 코드를 실행할 때 변수를 포함하는 스코프 최상단으로 끌어올려집니다.
함수안에 선언된 변수는 함수 스코프 안에서 최상단으로 끌어올려집니다.
호이스팅이 되지 않는 선언들
- let, const, class
- "cannot access before initialization."
블록 스코프를 생성하는 let, const는 호이스팅이 일어나지 않습니다. class
- var로 선언된 변수는 호이스팅되지만, let, const로 선언된 변수화 상수는 TDZ(Temporal Dead Zone 임시 접근 불가구역) 구역에 배치됩니다. 이 값들은 선언이 실행된 후에 TDZ에서 젝어 되어 사용 가능한 상태가 됩니다.
정리
- 함수 선언돠 변수 선언은 코드를 실행할 때 해당 선언 스코프 최상단으로 끌어올려집니다. 이런 현상을 호이스팅이라고 합니다.
- 선언한 변수의 값은 끌어올려지지 않습니다.
- let, const, class 선언은 호이스팅 현상이 일어나지 않습니다.