본문 바로가기

개발면접/자바스크립트 문제

Q1. 호이스팅 문제

Q1. 무엇이 출력 될까요?

 

function sayHi() {
  console.log(name)
  console.log(age)
  var name = 'Lydia'
  let age = 21
}
 
sayHi()

 

아래를 열면, 정답이 보입니다.

더보기

정답은 name은 undefined이고, age는 refference error이다.

 

여기서 착각할 수 있는 포인트는 var만 호이스팅이 되나? 라고 생각하게 된다. 

하지만 자세히 뜯어보면, var와 let, 그리고 const 모두 호이스팅은 된다. 하지만 var만이 선언과 초기화가 동시에 일어난다는 것이다. 그래서 var는 undefined를 출력하게 된다.

 

하지만, let 키워드는 초기화가 실행되기 전에 변수에 접근하려 했으므로 참조오류가 뜨는 것이다. 그리고 그 초기화되기 전까지의 영역? 을 일시적 사각지대 (TDZ)라고 칭한다.

 

정확히는 "변수는 그들의 어휘적 환경에 포함될 때 생성되지만, 어휘적 바인딩이 실행되기 전까지는 액세스할 수 없다."라고 말한다.

 

 

 

 

 

 

더 자세한 참고자료

https://medium.com/korbit-engineering/let%EA%B3%BC-const%EB%8A%94-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85-%EB%90%A0%EA%B9%8C-72fcf2fac365

 

let과 const는 호이스팅 될까?

let 또는 const가 호이스팅 되는지 여부를 알아보기 전에 호이스팅과 Temporal Dead Zone(TDZ)이란 개념에 대해 알아보겠다.

medium.com