inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

해결된 질문

268

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를 발생시키는 것입니다.

인증이 늦었습니다ㅜㅜ 확인부탁드립니다

0

20

1

스웨거 접속이 안되는데 확인 부탁드립니다.

0

26

1

설명이 잘못된거같습니다.

1

41

2

수강자료 다운로드 관련 문의

0

65

2

선택정렬 이해하기 & 구현하기

0

40

1

mission12-01 guide.md파일 누락

0

45

2

자료집 관련

0

45

2

13. (App 2) 기본기 훈련 에서

0

64

1

챌린지 시작일 문의

0

57

0

2. 어떤 도구를 사용하는 것이 가장 유리할까? 강의 중

0

51

1

11차시 Antigravity IDE 설치 후

0

48

1

처음 에이전트 설정을 잘못 했을 경우 수정 하는 방법

0

53

1

5,6,7,8 내용이 없어요

0

53

1

ThemeProvider를 이용해서 NextThemeProvider를 따로 생성하여 Layout.tsx에 적용하는 이유는 뭘까요?

0

57

1

mission 09-01 을 수행할 수 없어요

0

43

1

Context API vs Zustand 그리고 Auth

1

69

2

순수 함수 / 순수 컴포넌트

0

43

1

css box-sizing 관련 질문

0

48

2

스니펫이 이상해요

0

49

2

Editor Component의 최적화 불가능 이슈

0

60

2

useCallback ⊂ useMemo

0

47

2

깃허브 저장소를 어디에 첨부하셨나요?

1

63

1

nestjs 강의는 없나요??

1

57

2

스타터 저장소

1

62

1