var App = App || {} 부분을 let으로 선언하면 에러가 나는데, 혹시 이유를 여쭤봐도 될까요?

미해결질문
HYUNJUN KIM 프로필
HYUNJUN KIM 10달 전

오래된 질문이지만, 혹시 도움이 되는 분이 있을까해서 답글을 답니다.

예제는 오른쪽에 있는 변수를 왼쪽 var 선언된 변수에 할당하는 구조입니다.

그렇게 하기 위해서는,  App이라는 변수가 이미 선언돼있어야 합니다.

이 부분에서 자바스크립트는 내부적으로 호이스팅이라는 작업을 하게되는데,

App 이라는 변수를 먼저 선언하지 않았음에도,

내부적으로 var App; 이라는 선언 후에 해당 변수를 사용하게 됩니다.

따라서 호이스팅에 의한 위 예제를 풀어쓰면

var App;

var App = App || {};

이 됩니다. 그리고 앞서 선언된 App의 값이 undefined 이기 때문에 다음 조건인 빈 객체 리터럴을 할당받게 됩니다.

(자바스크립트에서 undefined는 false 로 취급되고, '||' 는 true 값 만을 반환합니다)

다만 let과 const는 해당 호이스팅 작업이 불가능합니다. 변수명의 재선언이 불가능하기 때문입니다.

따라서 let으로 선언하면 Cannot access 'App' before initialization 라는 에러가 발생합니다.

 

(잘아는것처럼 길게 써놨지만, 저도 배운지 얼마안되는 초심자라 틀린 내용이 있을 수 있습니다 😅
  만약 틀린 내용이 있다면 지적부탁드리겠습니다)

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스