let, const, var, function이 어떤 원리로 실행되는거지?

hipAn·2022년 9월 23일
0

끄적끄적 성장일지

목록 보기
13/30

var는 호이스팅되어 값이 할당되지않았어도 undefind로 초기화된다.

이렇게 호이스팅된 상태로 코드를 아래로 긁고 내려오다 선언부를 만나면 값이 초기화되는데

문제는 선얼을 연속으로 할수있고 이놈은 함수스코프를 가지고있다.

즉 어느블록이든 함수안에서는 누구나 접근가능하고 값을 임의로 변경이 가능하다.

코드가 길어지면 생각없이 재선언을 때려버리는 누군가때문에 인생이 망가질수있는것이다.

이를 보완하고자 let 과 const가 등장하게되었고

위 이미지와는 다르게

var와 같이 호이스팅되는것은 같으나 TDZ가 설정되어있어서

선언부를 지나기전까지는 접근이 불가능하다.

이는 코드로 선언부 위에서 호출을 해보면 이니셜라이즈되기전에 호출을 했다는 에러가 나온다.

(아에 호이스팅이 안되었으면 저렇게 나오는게아니라 레퍼런스에러가 나와야 한다.)

또한 함수스코프를 가지고있던 var와는 달리 블록단위 스코프를 가지고있어서

블록밖에서는 접근이 불가능하다.

let과 const는 큰 틀에서는 같은 특징을 가지고 있으나

const는 상수이므로 재할당이 불가능하다.

0개의 댓글