var, let, const는 모두 JavaScript에서 변수를 선언할 때 사용하는 키워드입니다. var는 함수 스코프를 가지며, 변수 중복 선언이 가능하고 호이스팅이 일어납니다. let과 const는 블록 스코프를 가지며, 중복 선언이 불가능하며, const는 값이 변경될 수 없는 상수를 선언할 때 사용됩니다.
var는 중복 선언이 가능하고 호이스팅이 일어나기 때문에 ES6에서는 let과 const를 권장합니다. var는 변수의 유효 범위를 제한하지 않아서 의도치 않은 값 변경으로 인한 버그 발생 가능성이 있으며, 중복 선언이 가능하여 예상치 못한 결과가 발생할 수 있습니다. 또한 변수 호이스팅으로 인해 코드의 가독성이 떨어지고 디버깅이 어려워지는 문제가 있습니다. 따라서 let과 const를 사용하여 변수를 선언하고, 블록 스코프를 이용하여 변수의 유효 범위를 제한하는 것이 좋습니다.
var: ES5 이전에 사용되었던 변수 선언 방식입니다. 함수 스코프를 가지며, 변수를 중복 선언해도 오류가 발생하지 않습니다. 변수 호이스팅이 일어나기 때문에 변수 선언 전에 사용해도 오류가 발생하지 않습니다.
let: ES6에서 추가된 블록 스코프를 가지는 변수 선언 방식입니다. 중복 선언이 불가능하며, 변수 호이스팅은 일어나지만 TDZ(Temporal Dead Zone) 때문에 선언 전에 사용하면 오류가 발생합니다.
const: let과 비슷하지만 값이 변경될 수 없는 상수를 선언할 때 사용합니다. 선언 시 초기화가 필요하며, 중복 선언이 불가능합니다. 블록 스코프를 가지며, 변수 호이스팅은 일어나지만 TDZ 때문에 선언 전에 사용하면 오류가 발생합니다.