JS 변수 선언 3단계 관련 문의드립니다
let x = x;
를 선언했을 때 호이스팅으로
let x; //선언
x = x; //초기화&할당 //reference error 발생
으로 알고 있습니다.
TDZ에 들어간 x를 참조하지 못하기 때문인데요
x = x; 가 undefined으로 초기화된 후 x가 할당된 것인지
아니면 바로 x로 값 x가 할당되는 것인지가 궁금합니다.
전자라면 x=undefined;로 초기화되어 TDZ을 벗어나게 되는데
REFERENCE ERROR가 발생하지 않을 것 같긴 한데요...
순서는 선언, 초기화, 할당이라서 헷갈립니다.
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
hiramap님, let x = x;와 관련된 질문에 답변 드리겠습니다.
변수 선언에서 let x = x;의 경우, 문제는 변수 x가 선언은 되었지만, 초기화되지는 않았기 때문에 발생합니다. let으로 선언된 변수는 선언 단계와 초기화 단계가 분리되어 있습니다. 선언 단계에서 변수가 생성되고, 초기화 단계에서 변수에 값이 할당되기 전까지 임시적 사각지대(TDZ, Temporal Dead Zone)에 있게 됩니다.
let x = x;에서 왼쪽의 x는 선언과 동시에 초기화를 시도하지만, 초기화하려는 x가 TDZ 내에 있으므로, 아직 값을 할당 받을 수 있는 상태가 아닙니다. 따라서, x = x; (할당 시도)에서 오른쪽의 x를 참조할 수 없게 되어 ReferenceError가 발생하게 됩니다.
즉, x가 undefined로 초기화되기 이전에, 값 할당 시도 중에 x를 참조하려 했기 때문에 에러가 발생하는 것이지, x에 대한 값으로 undefined를 명시적으로 할당하려 시도한 것은 아닙니다.
정리하면, 변수 x에 값을 할당하기 전에는 x를 참조할 수 없으멀로, let x = x;와 같은 코드는 TDZ 규칙에 의해 ReferenceError를 발생시키는 것입니다.
안녕하세요 한번 더 문의드립니다.
0
39
4
81강 실습 자료 없음
0
35
2
선생님 공유해주신 핸드북에 링크가 몇개 잘못되었어요
0
32
2
62강 실습자료가 잘못되었습니다.
0
30
1
코드 자료는 없는걸까요?
0
64
3
강의 목표
0
37
1
강의 노트 위주로 학습
0
41
1
쿠키 생성 관련
0
68
3
JWT auth error invalid token
0
64
2
경력기술서는 어떤 방향이 좋을까요?
0
53
2
MSA 와 BFF 아키텍처 설명 부분에 대한 문의
1
56
1
eslint.config.js 설정 질문입니다.
0
65
2
7강 흐름 제어 아키택쳐 코드 순서
1
54
1
수업자료 어디서 찾아볼 수 있나요?
0
48
2
함수 강의의 정답.. 어떤가요?
0
42
1
깃권한요청드립니다
0
40
1
<div id="banner">배너 이미지</div> 관련 질문
0
35
1
강의자료
0
42
1
윈도우에서 Node js를 설치하고 싶어요
0
38
0
addToFile function에서 path를 사용해 새로운 파일을 생성
0
47
1
[46강] EventEmitter를 활용한 10가지 패턴 중 플러그인 아키텍처
0
47
2
강의가 누락된것 같습니다.
0
58
2
용어 발음법이 계속 바뀌는 것 같은데 이런 부분들 개선이 가능할까요...?
0
72
1
counter01.html은 어디있을까요?
1
31
1





