inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

코딩인터뷰를 저격하는 JS 스나이퍼 양성학교

함수를 들었다 놨다, 내 멘탈도 들었다 놨다. 심쿵 < 호이스팅 >

let, const에서의 호이스팅에 대해서...

277

아기고양이

작성한 질문수 9

2

강의 내에서 let, const 에대해서는 호이스팅이 일어나지 않는다고 했는데 저는 조금 생각이 다르다고 생각해요.

일단 크게 2가지 단계로 나눠본다고 가정한다면...

1. 선언단계

변수나 함수들이 선언된다.

2. 실행단계

선언된 변수 값이 할당되거나 함수들이 실행된다.

 

즉 같은 변수를 block scope단위로 중첩해서 선언한다고 가정한다면  execution context가 생성 시, 호이스팅을 하지 않았다면 outer environment reference(es5 이전 scope chain)를 에서 자유변수로부터 값을 사용참조하겠지만, 호이스팅이 발생하면서 이미 두 execution context 내부적으로는 변수의 존재를 알고있으므로, 실행단계에서 TDZ존에 걸린다고 생각합니다.

 

javascript 코테 준비 같이 해요!

답변 1

3

Hojun Lee

안녕하세요 아기고양이님!

let 이나 const로 선언한 변수는 호이스팅을 안하는게 아니라 호이스팅이 발생하면서 변수의 존재를 알게되는 것이 아닌가 라고 의견을 말씀주셨는데요!

먼저 호이스팅의 정의를 말씀드리자면, 니콜라스 자카스의 <모던 자바스크립트>에 따르면 호이스팅이란 자바스크립트 엔진이 블록을 조사할 때 var 변수 선언을 발견하면 함수의 최상단 혹은 전역 스코프로 호이스팅하는 현상을 의미합니다. 그리고 let 과 const의 경우는 호이스팅되지 않고 TDZ내에 배치한다고 합니다. 때문에 아기고양이님의 말씀처럼 호이스팅이 발생하면서 변수의 존재를 알게 된것이 아니라, 이미 엔진이 변수의 존재를 알기에 호이스팅을 발생시켰다 이렇게 보는게 더 타당하지 않나 저는 생각합니다. 

여기가지가 제 생각인데요 ㅎㅎ 좋은 의견 감사합니다. 아기 고양이님의 얘기는 항상 즐겁게 읽고 있습니다!

강의에 대한 많은 관심에 감사드립니다 :)

섹션2번 부분 강의 화면이 잘 못된것 같아서 문의합니다.

0

15

1

call stack 표현이 잘못표현된것이 아닌가요?

0

36

2

React 와 Virtual DOM 의 이야기 영상 실행이 안됩니다.

0

33

1

일반 강의와 차이점?

1

44

1

!= 연산자의 역할

0

34

1

중요하진 않지만 설명하신부분에서 안된부분..

0

32

1

강의 듣는 순서가 어떻게 되나요?

0

47

1

stopPropagation()에 대해서 질문 있습니다.

0

49

2

12.13) 하단 여백 스타일링 관련 질문 드립니다.

0

62

2

27강 Context내 RSC 사용 관련 문의

0

78

3

혹시 다음 강의 제작 예정된 것들이 있을까요?

0

73

1

Enable Linting 항목을 찾을수가 없습니다.

0

43

2

에러 질문드립니다

0

60

2

1강 질문

0

65

2

prototype.constructor 를 꼭 설정해주어야 하는 이유가 뭔가요?

0

254

0

생성자 함수와 클래스 중 어느 것을 사용하는게 효율적인가요?

1

240

1

클로저 파트 마지막 예시에 관해 질문있습니다.

1

266

1

이벤트 위임관련...

1

255

1

생성자 함수관련...

2

227

1

function과 arrow function 관련

1

288

1

객체 공장장, <생성자> 편에 잘못된 내용이 있는것 같습니당

1

244

1

동영상강의에서 사용했던 코드 공유 부탁드립니다.

1

198

1

생성자 내에 함수 선언

2

324

2

apply에서 this 질문입니다

2

187

1