var 키워드로 선언한 변수의 문제점
변수중복선언 허용
var a= 50;
var b =3;
var b;
var a =100;
console.log(a,b);
함수 레벨 스코프
for(var a =0; a<n; a++){}
변수 호이스팅
- var 키워드는 undefined로 초기화 된 상태에서 호이스팅이 가능하다
- 가독성이 떨어지며 쓸데없다
let 키워드
변수중복선언 금지
블록 레벨 스코프
변수 호이스팅
- var는 선언과 초기화가 한번에 발생
- let은 선언, 초기화 분리 진행
- 런타임 이전에 선언되지만 초기화는 선언문에 도달했을 때 실행(일시적 사각지대)
- 선언문 이전 참조시 에러 발생
console.log(a);
var a = 20;
console.log(a);
let a = 30;
전역객체와 let
- var -> 전역객체 window의 프로퍼티
- let -> 전역객체의 프로퍼티가 아님 -> 보이지 않는 개념적인 블록 내에 존재
const 키워드
선언과 초기화
- 선언과 동시에 초기화 해야한다
- 블록 레벨 스코프, let과 같이 변수 호이스팅이 발생하지 않는 것처럼 동작
재할당 금지
상수
- 상태 유지와 가독성, 유지보수의 편의를 위해 적극적으로 활용
- 잘 변하지 않으며 그 값이 의미하는 바를 시사할 수 있다
- 대문자로 이름 설정, 단어가 많으면 _ 사용
const 키워드와 객체
- 참조 값은 변경되지 않지만 재할당 없이 값을 변경할 수 있기 때문에 값은 변경이 가능하다
var vs let vs const