const, let을 사용 전에는 var를 사용했다. var 변수는 동적으로 할당을 받는다. 동적으로 할당을 받는다는 건 무슨 뜻일까?
자바스크립트는 변수를 받으면 데이터형을 설정할 필요 없이 알아서 판단해서 그에 맞는 데이터형을 설정해준다. 데이터형 선언이 필요없는 변수 선언을 동적 선언이다. 보통 파이썬, 자바스크립트가 대표적이다.
var a = 5;
var b = 6;
var name = "w_c.a";
console.log(a+b);
실행 결과 11
console.log(name);
실행결과 w_c.a
하지만 이런식에 변수 선언은 여러 문제점이 있다 var 변수선언식은 데이터가 변할 수 있다는 위험이 있다. 개발자가 이 변수는 건드려서는 안되는데 나도 모르는 사이에 변수에 데이터를 바꾸는 실수를 할 수 있다. 그러기 때문에 두가지 변수 선언방식이 등장했다.
✍🏻치명적인 단점
1. var키워드는 블록 레벨 스코프를 지원하지 않고 함수 레벨 스코프를 지원한다. 즉, 함수 레벨 스코프를 지원하면서 의도치 않게 전역변수가 선언되어 심각한 부작용이 발생하기도한다.
(DEEP DIVE 일부 내용 P.39)
var에 문제점 때문에 등장한 변수가 const이다. cosnt는 constant라는 말에 줄임말다. const로 선언된 변수는 개발자가 실수로 바꾸든 의도적으로 바꿀려고 하든 상관없이 변하지 않고 일정한 값을 유지한다.
const a = 5;
a+=1;
console.log(a);
실행결과 : 에러
a = 7;
console.log(a);
실행결과 : 에러
let은 const와 반대로 변할 수 있는 값을 선언할 수 있다. 개발자가 의도적으로 변하는 값을 선언하고 싶으면 let을 선언해서 변수를 만들면 된다.
let a = 5;
a+=1;
console.log(a);
실행결과 : 6
주로 const를 많이 선언하고 let과 var는 거의 사용하지 않는다.
ES6로 문법이 업데이트되면서 이제는 var는 사용하지 않는다. (var은 사용은 가능하지만 권장하지 않음)
✍ var 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언이 허용된다. 이는 의도치 않게 변수값이 재할당되어 변경되는 부작용을 발생시킨다.
하지만 let, const 키워드로 선언된 변수는 같은 스코프 내에서 중복 선언을 허용하지 않는다.