var, const, let 차이점을 설명해주세요.

최관수·2023년 9월 6일
0

기술면접

목록 보기
4/58
post-thumbnail

내용 정리

  • var로 선언한 변수의 스코프는 함수 스코프이거나 전역 스코프입니다. 블록 기준으로 스코프가 생기지 않기 때문에 블록 밖에서 접근 가능합니다. var는 변수의 중복 선언을 허용합니다. hoisting이 적용되기 때문에 선언하기 전부터 사용이 가능합니다.
  • var에서 적용되는 내용 모두 불가능합니다. 블록 스코프로 작동되고 중복 선언이 불가능하며, let은 생성 시 TDZ(Temporal Dead Zone) 구간에 들어가게 되어 선언하기 전에는 reference error가 발생합니다.
  • const는 재할당 및 재선언 자체가 금지됩니다.
  • 요약하자면, var는 생성 단계에서 실행 컨텍스트를 생성하면서 초기화를 하기 때문에 undefined로 접근이 가능하고, let과 const는 실행 컨텍스트를 생성하면서 별도의 초기화를 하지 않기 때문에 reference error가 발생한다고 볼 수 있습니다. let 또는 const로 선언했을 때 선언 이전에 식별자를 참조할 수 없는데, 이 구역을 일시적 사각지대(Temporal Dead Zone)라고 부릅니다.
  • var는 메모리 공간을 확보하고 식별자와 연결하는 선언과 식별자에 암묵적으로 undefined 값을 바인딩하는 초기화를 동시에 진행하지만, var나 const는 초기화는 하지 않기 때문에 선언 라인 전에는 변수를 참조할 수 없습니다.

꼬리 질문

  • const는 재선언 및 재할당이 안 되지만 메서드나 프로퍼티로 접근해서 변경이 가능한데 그 부분을 자세하게 설명해주실 수 있을까요?
    • 원시타입은 재할당 자체가 불가능합니다, 다만 객체나 배열 같은 참조타입의 경우 주소 자체는 변동이 없으나 힙에 저장된 값은 매서드나 프로퍼티로 접근해서 변경 가능합니다. 하지만 직접적으로 재할당을 하고자 하면 에러가 발생합니다.

참고자료

profile
평소엔 책과 영화와 음악을 좋아합니다. 보편적이고 보통사람들을 위한 서비스 개발을 꿈꾸고 있습니다.

0개의 댓글