
var 키워드는 2015년 ES6의 등장 이전에 주로 사용하던 변수 선언 방식으로, 현재 let과 const의 등장으로 이제는 잘 쓰이지 않는 방식이다.
const 키워드는 2015년 ES6 이후에 등장한 변수 선언 방식으로, 그 변수를 상수로서 지정함을 선언하는 방식이다. const 로 선언한 변수의 기존 값에 다른 값을 할당하려고 하면 오류가 발생한다.
let 키워드는 2015년 ES6 이후에 등장한 변수 선언 방식으로, 일반적인 변수를 선언한다.
console.log(name); // undefined
var name = 'Ben';
console.log(name); // Ben
name 은 선언 전에 이미 호출이 되었지만 호이스팅이 일어나 오류가 나지 않고 정상적으로 호출이 되었다. 하지만 변수 값에 대해서는 초기화된 상태이므로, 값 할당 이전에는 undefined 가 출력된다.console.log(name); // ReferenceError
const name = 'Ben';
var name = 'Ben';
console.log(name); // Ben
var name = 'Alex';
console.log(name); // Alex
let name = 'Ben';
let name = 'Alex'; // SyntaxError
if (true) {
var name = 'Ben';
};
function Age() {
var age = 20;
};
console.log(name); // Ben
console.log(age); // ReferenceError
if (true) {
let name = 'Ben';
};
function Age() {
const age = 20;
};
{let job = "Post Officer"}
console.log(name); // ReferenceError
console.log(age); // ReferenceError
console.log(job); // ReferenceError
var greeter = "hey hi";
var times = 4;
if (times > 3) {
var greeter = "say Hello instead";
}
console.log(greeter) // "say Hello instead"
위의 경우를 보면, greeter 변수가 var 로 선언되었기 때문에 중복선언이 되면서 값이 덮어씌워지는 모습을 볼 수 있다. 게다가 블록 범위 안에서 선언 되었는데도 var 이기 때문에 전역변수가 되어 값이 덮어씌워진 것이다. 위의 예시는 코드가 짧아 greeter 가 중복된다는 것을 깨닫기 쉽지만, 코드가 길어지고 변수의 개수가 많아지기 시작하면 위에서 어떤 변수를 썼는지 헷갈리기 시작한다. 때문에 var 을 사용했을 때는 위와 같은 상황이 의도치않게 벌어질 수 있다. 하지만 const 와 let 의 경우, 변수의 스코프를 한정하고 중복선언을 금지하여 이러한 상황을 사전에 방지할 수 있게끔 한다.
따라서 var 은 역사의 뒤안길로 묻어두고, const 와 let 을 변하는 값인지 아닌지에 따라 그때그때 상황에 맞게 사용하는 것이 바람직하다고 볼 수 있겠다.