TIL : Hoisting과 TDZ / parameter와 argument

hihyeon_cho·2023년 3월 28일
0

TIL

목록 보기
90/101

Hoisting 이란? TDZ란?

Hoisting

: Hoisting이란, 인터프리터가 변수와 함수의 메모리공간을 선언하기 전에 미리 할당하는 것을 의미합니다.

그러므로, 변수 호이스팅은 변수의 선언이 런타임 이전단계에서 다른 코드들보다 먼저 실행 되어, 마치 코드의 선두로 끌어올려진 것처럼 동작하는 것을 의미하며,
함수 호이스팅은 함수 선언문이 코드의 선두로 끌어올려진 것 처럼 동작하는 것을 의미합니다.

var 키워드를 사용한 변수 선언문 이전에 변수를 참조하면 변수호이스팅에 의해 undefined로 평가되지만 함수선언문으로 정의한함수를 함수 선언문 이전에 호출하면 함수호이스팅에 의해 호출이 가능합니다.

함수 표현식은 변수에 할당되는 값이 함수 리터럴이 되기 때문에 함수 표현식으로 함수를 정의하면 함수 호이스팅이 발생하는 것이 아닌 변수 호이스팅이 발생하게 됩니다. 그러므로, 함수 표현식 이전에 함수를 참조하면 undefined로 평가되기 때문에 TypeError가 발생하기 때문에 함수 선언문보다는 함수 표현식을 사용하는 것이 좋습니다.

TDZ

: TDZ는 일시적 사각지대를 의미합니다.
let 키워드로 선언한 변수는 스코프의 시작 지점부터 초기화 단계 시작 지점까지 변수를 참조할 수 없습니다. 참조할 수 없는 이 구간을 일시적 사각지대라고 합니다. let 키워드로 변수를 선언해도 var키워드로 변수를 선언한 것과 같이 여전히 호이스팅이 발생하는데,
undefined로 초기화하기 이전에 변수에 접근하려고 하면 Reference Error를 발생시켜서 변수호이스팅이 발생하지 않는 것처럼 보이도록 해줍니다.




parameter와 argument의 차이에 대해 설명해주세요.

parameter(매개변수)는 함수의 정의할 때, 인수를 전달하기 위해 사용하는 변수를 의미하며,
argument(인수)는 함수가 호출될 때, 함수로 전달되는 값을 의미합니다.

profile
코딩은 짜릿해 늘 새로워 ✨

0개의 댓글