inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

JS 변수 선언 3단계 관련 문의드립니다

해결된 질문

265

hiramap

작성한 질문수 2

0

let x = x;

를 선언했을 때 호이스팅으로

let x; //선언

x = x; //초기화&할당 //reference error 발생

으로 알고 있습니다.

 

TDZ에 들어간 x를 참조하지 못하기 때문인데요

 

x = x; 가 undefined으로 초기화된 후 x가 할당된 것인지

아니면 바로 x로 값 x가 할당되는 것인지가 궁금합니다.

전자라면 x=undefined;로 초기화되어 TDZ을 벗어나게 되는데

REFERENCE ERROR가 발생하지 않을 것 같긴 한데요...

순서는 선언, 초기화, 할당이라서 헷갈립니다.

js javascript

답변 1

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
hiramap님, let x = x;와 관련된 질문에 답변 드리겠습니다.

변수 선언에서 let x = x;의 경우, 문제는 변수 x가 선언은 되었지만, 초기화되지는 않았기 때문에 발생합니다. let으로 선언된 변수는 선언 단계와 초기화 단계가 분리되어 있습니다. 선언 단계에서 변수가 생성되고, 초기화 단계에서 변수에 값이 할당되기 전까지 임시적 사각지대(TDZ, Temporal Dead Zone)에 있게 됩니다.

let x = x;에서 왼쪽의 x는 선언과 동시에 초기화를 시도하지만, 초기화하려는 x가 TDZ 내에 있으므로, 아직 값을 할당 받을 수 있는 상태가 아닙니다. 따라서, x = x; (할당 시도)에서 오른쪽의 x를 참조할 수 없게 되어 ReferenceError가 발생하게 됩니다.

즉, xundefined로 초기화되기 이전에, 값 할당 시도 중에 x를 참조하려 했기 때문에 에러가 발생하는 것이지, x에 대한 값으로 undefined를 명시적으로 할당하려 시도한 것은 아닙니다.

정리하면, 변수 x에 값을 할당하기 전에는 x를 참조할 수 없으멀로, let x = x;와 같은 코드는 TDZ 규칙에 의해 ReferenceError를 발생시키는 것입니다.

3강 질문

0

12

1

74. 데이터 캐시 - 1 (이론) 강의 영상 누락

0

25

1

2강 nodejs 3단계 설명 질문

0

31

1

imagesLoaded에 관한 질문

0

19

2

useEffect와 lifecycle문의

0

26

2

프론트엔드 학습 수준 문의

0

37

2

리액트 챕터별 코드에서 eslint 설정파일이 없어요

0

47

2

최근 코테, 과제 테스트 트렌드

0

67

2

lucide react 아이콘 설치

0

46

2

17강 zustand store 서버에서 생성

1

36

1

문의관련 문의

0

42

2

next.js 를 2대이상 실행하는 경우 제공하는 cache 기능들은 어떻게 되나요?

0

55

2

76. 전문성 더하기: 놓치면 아쉬운 관련 기술들 수업 자료가 없어요.

0

46

2

ai 도구 질문

0

31

1

저는 왜 콘솔에서 props가 한 줄만 찍히나요?

0

47

1

렌더링 차단 리소스 javascript 실행에 관련해서 질문 있습니다.

0

47

2

데이터 로딩중 화면만 계속 나와요!!

0

53

2

퍼블리셔일경우 어느정도 수준까지 강의를 들어야할까요

0

79

2

02-04 layout.tsx 구조가 달라요

0

58

2

불변성을 지키며 수정 삭제를 할때도 Map이 유리한가요?

0

54

1

개인 프로젝트로 앱 개발해서 다운로드 1300 달성했는데 어느 정도 의미가 있을까요? (안드로이드 개발자)

0

69

1

22강 강의 영상 문의 드립니다.

0

49

2

20강 마무리작업에서

0

38

2

아래 위치에 동영상이 보이지 않습니다.

0

52

1