차이점
1. 재할당 (값 변경)
가능: var, let
불가능: const
const는 상수를 선언하는 키워드로, 값을 한번 할당하면 변경할 수 없다.
2. 재선언 (동일 이름 중복 선언)
가능: var
불가능: let, const
var tester = "Hi";
var tester = "Hello";
이렇게 재선언해도 오류 안 남 -> 기존에 동일 이름의 변수를 선언했던 것을 까먹고 오용할 가능성 있다.
3. Scope (범위)
Function Scope: var
Block Scope: let, const
var는 함수 내부에 선언된 경우만 지역변수로 인식하며, 그 외는 모두 전역변수로 간주한다.
즉, if, for, while, try, catch 문 등의 코드 블럭 내부에서 var로 선언된 변수는 전역변수로 간주되어, 블럭 외부에서도 참조할 수 있다.
if, for, while, try, catch 문 등의 코드 블럭 내부에서 let, const로 선언된 변수는 지역변수로 간주되어, 외부에서 참조할 수 없다.
4. 변수 호이스팅
실행: var
미실행: let, const
호이스팅(Hoisting)이란, 코드 실행 전 변수 선언을 먼저 하여 뒤에서 선언된 변수도 앞 코드에서 참조할 수 있게 된다.
var는 선언과 동시에 undefined로 초기화된다.
그러므로 아래 코드에서 에러가 발생하지 않는다.
console.log(tester); // undefined
var tester = "HI";
console.log(tester); // HI
반면 let, const는 코드 실행 전 변수 선언은 되지만 초기화되지 않는다.
즉 아래 코드에서 에러가 발생한다.
console.log(tester); // ReferenceError: tester is not defined
let tester = "HI";
결론
var 보다는 const, let을 사용하자.
값이 변경될 가능성이 없으면 const를 사용하자.