var
var
는 함수 범위를 갖습니다. 블록 범위가 없으므로 블록 안에서 선언된 var
변수는 블록 밖에서도 접근할 수 있습니다.var
로 선언된 변수는 호이스팅이 발생합니다. 이는 변수가 선언되기 전에 참조될 수 있으며, 그 경우 undefined
로 초기화됩니다.let
let
은 블록 범위를 갖습니다. 변수가 선언된 블록 내에서만 접근할 수 있으며 블록 밖에서는 접근할 수 없습니다.let
으로 선언된 변수는 초기화되기 전에 참조하려 하면 ReferenceError가 발생합니다.const
const
도 블록 범위를 갖으며, let
과 동일한 스코핑 규칙을 따릅니다.let
과 마찬가지로 초기화 전에 참조하면 ReferenceError가 발생합니다.const
로 선언된 변수는 재선언이 불가능하며, 한 번 할당된 값을 변경할 수 없습니다. 이것은 변수 자체를 불변으로 만드는 것이 아니라 변수의 참조를 불변으로 만드는 것이므로, 객체나 배열 같은 참조 타입을 const
로 선언한 경우, 내부의 속성이나 요소는 변경할 수 있습니다.var
: 함수 범위, 호이스팅, 재선언 가능let
: 블록 범위, 호이스팅 없음, 재선언 불가능const
: 블록 범위, 호이스팅 없음, 재선언 및 재할당 불가능일반적인 경우에는 let
과 const
를 사용하는 것이 좋으며, 특별한 이유가 없다면 var
의 사용은 피하는 것이 현대 JavaScript 개발에서 권장됩니다.
세 요소를 블록스코프 / 호이스팅 / 재선언 재할당 여부를 통해 먼저 확실하게 구분하고
각자 간단하게 한줄요약으로 말씀드리는 것이 포인트가 될 듯합니다.
해당 질문을 면접에서 받게 된다면,
VAR / LET / CONST 는 각 블록스코프와 호이스팅여부 / 변수 재선언 및 재할당이 가능한지의 여부로 특성이 나뉘며
VAR는 함수 범위에서 블록 안밖으로 접근이 가능하며 , LET과 CONST는 블록내에서만 접근이 가능합니다.
VAR는 호이스팅으로 인해 변수 초기화 이전에 먼저 참조할 수 있으나, 나머지 변수는 그렇지 않아 초기화 전에 참조하려고 하면 에러가 발생하고 VAR는 UNDEFIEND 값이 나옵니다.
LET은 범위내에서 다시한번 같은 변수명으로 선언 가능하나, VAR는 그렇지 않고 , CONST는 값의 재할당도 불가능하다는 차이가 있습니다.