inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

해결된 질문

272

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가 발생하게 됩니다.

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

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

TTL 산정 기준

0

5

0

10월 15일 삭제예정 강의 문의

0

44

1

강의제목에 10/15일 삭제라고 나와있는데,

0

50

1

스크립트 영상 미일치

0

84

3

감정일기장 다이어리 필터 적용할때 컨텍스트를 Home에서 가져오는 특별한 이유가 궁금합니다.

0

64

2

강의 설명 중에 헷갈리는 것이 있네요

0

62

1

수업자료 관련 문의

0

75

3

1강 동영상 재생 오류

1

72

2

Composition단계에서 `Layer`는 누가 만드는지

0

49

1

Strict Mode 예시 질문!

0

66

2

수업이 안보여요

0

67

1

저자 블로그에 있는 강의는 어떤 강의인가요?

1

68

1

[해결됨]윈도우즈 환경에서 타입 스크립트 파일이 실행이 안됩니다.

1

89

5

4강 카드뉴스 자동화 자료가 안보입니다!!

0

112

2

윈도우즈 환경에서 진행중입니다.

0

65

2

4강 카드뉴스 자동화 자료

6

129

1

라이브 강의 영상 녹화본이 있을까요?

0

104

1

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

0

95

1

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

0

65

1

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

1

81

2

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

0

116

2

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

0

62

1

mission12-01 guide.md파일 누락

0

92

2

자료집 관련

0

69

2