자바스크립트에서 변수를 선언할 때 사용하는 var, let, const의 차이점을 4가지 핵심 기준(재선언, 재할당, 스코프, 호이스팅)으로 비교해봤다.
과거 자바스크립트에서 변수를 선언하는 유일한 방법이었다. 하지만 유연함이 오히려 독이 되어 예기치 못한 버그를 유발하기 쉽다.
if문이나 for문 같은 블록 안에서 선언해도 전역 변수처럼 취급될 수 있다.ES6에서 도입된 변수 선언 방식이다. 값이 변할 수 있는 변수를 선언할 때 사용한다.
{ } 안에서 선언된 변수는 그 블록 안에서만 유효하다.let과 함께 ES6에 도입되었으며, 변하지 않는 값(상수)을 선언할 때 사용한다. 모던 자바스크립트에서는 기본적으로 const 사용을 권장한다.
const a; 처럼 선언만 하는 것은 불가능하며, 반드시 값을 함께 할당해야 한다.세 가지 모두 호이스팅(선언이 코드의 최상단으로 끌어올려지는 현상)이 발생한다.
하지만 var는 선언과 동시에 undefined로 초기화되어 에러 없이 접근 가능한 반면, let과 const는 초기화되기 전까지 접근할 수 없는 TDZ(일시적 사각지대) 에 빠지게 되어 ReferenceError를 뱉어낸다. 이는 코드의 안정성을 높여주는 중요한 특징이다.
| 특징 | var | let | const |
|---|---|---|---|
| 재선언 | 가능 (O) | 불가능 (X) | 불가능 (X) |
| 재할당 | 가능 (O) | 가능 (O) | 불가능 (X) |
| 스코프 (Scope) | 함수 레벨 스코프 | 블록 레벨 스코프 | 블록 레벨 스코프 |
| 호이스팅 (Hoisting) | undefined로 초기화됨 | 호이스팅 되지만 TDZ 발생 | 호이스팅 되지만 TDZ 발생 |
변수 선언 시 기본적으로
const를 사용하고, 재할당이 반드시 필요한 경우(예:for문의 반복 변수)에만 한정적으로let을 사용하면 된다.var는 더 이상 사용하지 않는 것이 좋다!