Inflearn Community Q&A
let, const에서의 호이스팅에 대해서...
Written on
·
247
2
강의 내에서 let, const 에대해서는 호이스팅이 일어나지 않는다고 했는데 저는 조금 생각이 다르다고 생각해요.
일단 크게 2가지 단계로 나눠본다고 가정한다면...
1. 선언단계
변수나 함수들이 선언된다.
2. 실행단계
선언된 변수 값이 할당되거나 함수들이 실행된다.
즉 같은 변수를 block scope단위로 중첩해서 선언한다고 가정한다면 execution context가 생성 시, 호이스팅을 하지 않았다면 outer environment reference(es5 이전 scope chain)를 에서 자유변수로부터 값을 사용참조하겠지만, 호이스팅이 발생하면서 이미 두 execution context 내부적으로는 변수의 존재를 알고있으므로, 실행단계에서 TDZ존에 걸린다고 생각합니다.
Answer 1
3
안녕하세요 아기고양이님!
let 이나 const로 선언한 변수는 호이스팅을 안하는게 아니라 호이스팅이 발생하면서 변수의 존재를 알게되는 것이 아닌가 라고 의견을 말씀주셨는데요!
먼저 호이스팅의 정의를 말씀드리자면, 니콜라스 자카스의 <모던 자바스크립트>에 따르면 호이스팅이란 자바스크립트 엔진이 블록을 조사할 때 var 변수 선언을 발견하면 함수의 최상단 혹은 전역 스코프로 호이스팅하는 현상을 의미합니다. 그리고 let 과 const의 경우는 호이스팅되지 않고 TDZ내에 배치한다고 합니다. 때문에 아기고양이님의 말씀처럼 호이스팅이 발생하면서 변수의 존재를 알게 된것이 아니라, 이미 엔진이 변수의 존재를 알기에 호이스팅을 발생시켰다 이렇게 보는게 더 타당하지 않나 저는 생각합니다.
여기가지가 제 생각인데요 ㅎㅎ 좋은 의견 감사합니다. 아기 고양이님의 얘기는 항상 즐겁게 읽고 있습니다!
강의에 대한 많은 관심에 감사드립니다 :)





