var App = App || {} 부분을 let으로 선언하면 에러가 나는데, 혹시 이유를 여쭤봐도 될까요?
356
작성한 질문수 4
var App = App || {} 부분을 let으로 선언하면 에러가 나는데, 혹시 이유를 여쭤봐도 될까요?
답변 1
5
오래된 질문이지만, 혹시 도움이 되는 분이 있을까해서 답글을 답니다.
예제는 오른쪽에 있는 변수를 왼쪽 var 선언된 변수에 할당하는 구조입니다.
그렇게 하기 위해서는, App이라는 변수가 이미 선언돼있어야 합니다.
이 부분에서 자바스크립트는 내부적으로 호이스팅이라는 작업을 하게되는데,
App 이라는 변수를 먼저 선언하지 않았음에도,
내부적으로 var App; 이라는 선언 후에 해당 변수를 사용하게 됩니다.
따라서 호이스팅에 의한 위 예제를 풀어쓰면
var App;
var App = App || {};
이 됩니다. 그리고 앞서 선언된 App의 값이 undefined 이기 때문에 다음 조건인 빈 객체 리터럴을 할당받게 됩니다.
(자바스크립트에서 undefined는 false 로 취급되고, '||' 는 true 값 만을 반환합니다)
다만 let과 const는 해당 호이스팅 작업이 불가능합니다. 변수명의 재선언이 불가능하기 때문입니다.
따라서 let으로 선언하면 Cannot access 'App' before initialization 라는 에러가 발생합니다.
(잘아는것처럼 길게 써놨지만, 저도 배운지 얼마안되는 초심자라 틀린 내용이 있을 수 있습니다 😅
만약 틀린 내용이 있다면 지적부탁드리겠습니다)
UserService, CertificationService 책임 분리 기준 질문
0
23
1
POJO에서 Spring Test로 넘어갈 때 누락(해결됨)
0
31
1
[개발 환경 준비 인증하기] 미션 제출 방법 문의
0
59
3
미션 마감은 언제 되는 건가요?
0
57
1
AvailableUsers
0
40
1
storybook/ addon react-router-dom
0
42
1
mac python 3.10 - permission denied
0
51
1
private 상수 테스트 관련 질문
0
82
1
모듈간끼리 연관성있는 것들에 대해 어떻게 설계를 해야 할까요?
1
300
1
dry 패턴
1
211
1
메소드 파라미터 변수명규칙
0
312
1
설치1듣고있는데용
1
395
1
actual 관련 Error Catch 부분.
0
223
1
jasmine 3 버전 실행시 randomized with seed 가 뭔지 궁금합니다.
0
323
0
모듈화를 진행할 때, 모듈패턴말고 클래스를 써서 모듈화를 진행해도 괜찮나요
0
284
1
App.ClickCounter의 인자로 원시형 자료가 아닌 객체를 넘겨주는 이유가 무엇인가요?
0
273
2
클릭카운터 모듈 - 스펙2 코드 질문
0
432
2
전역변수 value에 관한 질문입니다.
0
290
0
강의 모두 보고 궁금한게 있는데요.
0
247
1
event delgation test 질문드립니다
0
223
1
event
0
236
0
모듈패턴 중에서 임의모듈패턴 /즉시실행함수 패턴
0
224
1
사소한 질문
0
285
1
강좌관련 질문드립니다
0
327
1





