var, let, const의 차이는 무엇인가.

dowon kim·2023년 8월 9일
1
post-custom-banner

var

  • Function Scope: var는 함수 범위를 갖습니다. 블록 범위가 없으므로 블록 안에서 선언된 var 변수는 블록 밖에서도 접근할 수 있습니다.
  • Hoisting: var로 선언된 변수는 호이스팅이 발생합니다. 이는 변수가 선언되기 전에 참조될 수 있으며, 그 경우 undefined로 초기화됩니다.
  • 재선언 가능: 같은 스코프 내에서 동일한 이름의 변수를 다시 선언할 수 있습니다.

let

  • Block Scope: let은 블록 범위를 갖습니다. 변수가 선언된 블록 내에서만 접근할 수 있으며 블록 밖에서는 접근할 수 없습니다.
  • No Hoisting: 실제로는 호이스팅이 발생하지만, let으로 선언된 변수는 초기화되기 전에 참조하려 하면 ReferenceError가 발생합니다.
  • 재선언 불가능: 같은 스코프 내에서 동일한 이름의 변수를 다시 선언할 수 없습니다.

const

  • Block Scope: const도 블록 범위를 갖으며, let과 동일한 스코핑 규칙을 따릅니다.
  • No Hoisting: let과 마찬가지로 초기화 전에 참조하면 ReferenceError가 발생합니다.
  • 재선언 불가능 & 재할당 불가능: const로 선언된 변수는 재선언이 불가능하며, 한 번 할당된 값을 변경할 수 없습니다. 이것은 변수 자체를 불변으로 만드는 것이 아니라 변수의 참조를 불변으로 만드는 것이므로, 객체나 배열 같은 참조 타입을 const로 선언한 경우, 내부의 속성이나 요소는 변경할 수 있습니다.

정리

  • var: 함수 범위, 호이스팅, 재선언 가능
  • let: 블록 범위, 호이스팅 없음, 재선언 불가능
  • const: 블록 범위, 호이스팅 없음, 재선언 및 재할당 불가능

일반적인 경우에는 letconst를 사용하는 것이 좋으며, 특별한 이유가 없다면 var의 사용은 피하는 것이 현대 JavaScript 개발에서 권장됩니다.

포인트

세 요소를 블록스코프 / 호이스팅 / 재선언 재할당 여부를 통해 먼저 확실하게 구분하고

각자 간단하게 한줄요약으로 말씀드리는 것이 포인트가 될 듯합니다.

해당 질문을 면접에서 받게 된다면,

면접에서 할 대답

VAR / LET / CONST 는 각 블록스코프와 호이스팅여부 / 변수 재선언 및 재할당이 가능한지의 여부로 특성이 나뉘며

VAR는 함수 범위에서 블록 안밖으로 접근이 가능하며 , LET과 CONST는 블록내에서만 접근이 가능합니다.

VAR는 호이스팅으로 인해 변수 초기화 이전에 먼저 참조할 수 있으나, 나머지 변수는 그렇지 않아 초기화 전에 참조하려고 하면 에러가 발생하고 VAR는 UNDEFIEND 값이 나옵니다.

LET은 범위내에서 다시한번 같은 변수명으로 선언 가능하나, VAR는 그렇지 않고 , CONST는 값의 재할당도 불가능하다는 차이가 있습니다.

profile
The pain is so persistent that it is like a snail, and the joy is so short that it is like a rabbit's tail running through the fields of autumn
post-custom-banner

0개의 댓글