코드를 실행하기 전 변수선언/함수선언이 해당 스코프의 최상단으로 끌어올려진 것 같은 현상을 말한다.
자바스크립트의 모든 선언에는 호이스팅이 일어난다.
하지만 let, const, class
를 이용한 선언문은 호이스팅이 발생하지 않는 것 처럼 동작한다.
var
로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화하는데 반면 let
과 const
로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않기 때문이다.
Temporal Dead Zone/시간상 사각지대
변수가 선언되고 초기화되기까지의 그 사이에 위치하는 사각지대 구간으로 변수가 선언되고 초기화가 이뤄지기 전까지의 구간으로 초기화되지않은 변수가 선언단계와 초기화단계 사이에 잠시 머물러있는 셈이다.
var
는 변수 선언 전에 선언단계와 초기화단계를 동시 진행하므로 TDZ
가 존재하지 않는다.
따라서 undefined
로 호출되는 호이스팅이 이뤄진 후, 초기화 단계에 오면 TDZ
상태가 해제된다.
하지만 let, const
는 선언단계와 초기화 단계가 분리되어 실행된다.
따라서 선언~초기화 단계 사이에서는 변수에 등록했지만 메모리가 할당되지않은 상태라 reference error
가 발생한다. 이러한 사각지대를 TDZ
라고 한다.
인수, 인자'는 의미로 혼용되어 사용되고 있지만
Parameter
는 함수를 정의할 때 사용되는 변수를 의미하고
Argument
는 실제로 함수가 호출될 때, 넘기는 변수값을 의미한다.
즉, Parameter
는 매개변수이고 함수에서 정의된 변수와 실제 매개변수값(인자.인수값)을 변수로 넘겨줄때 사용되고,
Argument
는 위 괄호 안의 인자, 인수를 의미한다