초점: 다양한 변수 선언 방식과 스코프, 호이스팅에 대한 이해를 묻는 질문입니다.
대답:
var는 함수 스코프를 가지며 호이스팅 시 변수 선언만 최상단으로 끌어올려집니다.
선언 전에 undefined로 되어있어 접근이 가능합니다.
반면, let과 const는 블록 스코프를 가지고, 호이스팅되지만 '일시적 사각지대'에 빠져 선언 전에는 접근할 수 없습니다.
let은 변수 재할당이 가능하지만, const는 초기 할당 이후 변수의 재할당을 허용하지 않습니다.
그러나 const로 선언된 객체 내부의 속성 변경은 가능합니다.
(※ 호이스팅은 함수와 변수를 코드 실행전에 메모리에 저장하는 것. )
상세설명1.
var은 함수 스코프이다. 함수에서의 var변수 선언은 외부에서의 사용을 제한할 수 있지만
if문 같은 블록스코프에서의 선언 때는 바깥에서의 사용 제한이 불가하다.
const, let은 블록 스코프이다.
함수든, if문 같은 블록스코프이든 안에서 선언한 것을 바깥에서 사용할 수 없다.
상세설명2.
호이스팅은 함수와 변수를 코드 실행전에 메모리에 저장하는 것.
그런데 var은 변수선언이 최상단에 끌어올려지니, 그 변수선언 이전에 함수에 그 변수를 넣어 사용해도 사용이 안됨.
x를 선언하기 전에 접근해도 ReferenceError가 발생하지 않고 undefined가 출력됩니다.
오류 검출이 안됨.

let과 const로 선언된 변수도 호이스팅되지만, var와는 다르게 "일시적 사각지대(Temporal Dead Zone, TDZ)"에 빠집니다. TDZ는 변수가 선언되기 전의 구간을 말하며, 이 구간에서 변수에 접근하려고 하면 ReferenceError가 발생합니다.
아래와 같은 에러를 발생시켜준다. 코드 오류를 잘 찾아줌.

'📋CS > 기초질문' 카테고리의 다른 글
질문5 프로토타입(Prototype) 기반 상속은 무엇인가요? (0) | 2024.04.04 |
---|---|
react 질문 모음 (0) | 2024.04.02 |
질문4 이벤트 버블링(Event Bubbling)과 캡처링(Capturing)를 설명하세요 (2) | 2024.04.01 |
질문3 프로미스(Promise)와 async/await의 차이점은 무엇인가요? (0) | 2024.03.30 |
질문1 클로저(Closure)란 무엇이며, 어떻게 사용하나요? (0) | 2024.03.28 |