inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

288

아기고양이

작성한 질문수 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내에 배치한다고 합니다. 때문에 아기고양이님의 말씀처럼 호이스팅이 발생하면서 변수의 존재를 알게 된것이 아니라, 이미 엔진이 변수의 존재를 알기에 호이스팅을 발생시켰다 이렇게 보는게 더 타당하지 않나 저는 생각합니다. 

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

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

안녕하세요 한번 더 문의드립니다.

0

19

1

81강 실습 자료 없음

0

18

2

선생님 공유해주신 핸드북에 링크가 몇개 잘못되었어요

0

27

2

62강 실습자료가 잘못되었습니다.

0

25

1

코드 자료는 없는걸까요?

0

53

3

강의 목표

0

35

1

강의 노트 위주로 학습

0

39

1

쿠키 생성 관련

0

66

3

JWT auth error invalid token

0

62

2

경력기술서는 어떤 방향이 좋을까요?

0

52

2

MSA 와 BFF 아키텍처 설명 부분에 대한 문의

0

52

1

eslint.config.js 설정 질문입니다.

0

64

2

7강 흐름 제어 아키택쳐 코드 순서

1

53

1

수업자료 어디서 찾아볼 수 있나요?

0

47

2

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

0

258

0

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

1

251

1

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

1

277

1

이벤트 위임관련...

1

265

1

생성자 함수관련...

2

239

1

function과 arrow function 관련

1

293

1

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

1

258

1

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

1

206

1

생성자 내에 함수 선언

2

335

2

apply에서 this 질문입니다

2

198

1