[JS] Hoisting

Jay ·2022년 6월 29일
0

Hoisting?

MDN : 코드 실행 전 인터프리터가 변수와 함수의 선언을 위해 메모리를 할당하는 과정.

Best : 실행 컨텍스트 생성 시 렉시컬 스코프 내의 선언이 끌어올려 지는 것.

변수 호이스팅 비교

Var는 변수 선언문 이전에 참조할 수 있다. 단, 할당문 이전에 변수를 참조하면 undefined를 반환
let과 const는 변수 선언문 이전에 참조할 수 없다.(ReferenceError)

이는 변수 호이스팅이 발생하지 않는 것 처럼 보이지만, 이는 var와 달리 let과 const는 선언과 초기화가 구분되어 진행되기 때문이다.

따라서 스코프의 시작지점부터 변수 초기화 시작 지점까지 메모리상에는 존재하지만 참조는 할 수 없는 TDZ(Temporal Dead Zone)이 발생하게 된다.

결론적으로 let, const 뿐만 아니라 모든 선언(function, class 등)을 호이스팅 하는 것이다.

함수 표현식과 함수 선언문

함수 표현식으로 함수를 정의하면 변수 호이스팅이 발생.
함수는 호출되기 전에 선언되는 것이 일반적인 규칙이다.
따라서 함수 표현식이 권장된다.

References

https://medium.com/@limsungmook/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%8A%94-%EC%99%9C-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85%EC%9D%84-%EC%84%A0%ED%83%9D%ED%96%88%EC%9D%84%EA%B9%8C-997f985adb42

profile
Jay입니다.

0개의 댓글