우선 var
는 let
과 const
와의 변수 선언방식에서의 차이점이 있습니다.
var | let | const | |
---|---|---|---|
재할당여부 | 가능 | 가능 | 불가 |
스코프 | 함수레벨 | 블록레벨 | 블록레벨 |
변수 호이스팅 | 선언문 이전 참조가능. 단, 할당문 이전 변수를 참조하면 undefined 를 반환 | 선언과 초기화가 분리되어 진행.일시적 사각지대 구간 존재(TDZ) | 선언과 초기화가 동시에 진행됨 |
var
키워드는 변수 중복선언이 가능한데 별다른 에러가 발생하지 않는대신 , 이때 변수를 중복선언 하면 할당된값까지 의도치않게 먼저 선언된 변수 값이 재할당되어 변경되는 부작용이 발생합니다
let bar =123 ;
// let이나 const 키워드로 선언된 변수는 같은 스코프내에 중복선언을 허용하지않음
let bar = 456; // 구문오류
하지만 let키워드로 이름이 같은 변수를 중복선언하면 '문법에러'가 발생한다. 따라서 초기화 단계 시작 지점까지 변수를 참조할 수 없는 일시적 사각지대(Temporal Dead Zone: TDZ) 구간이 존재합니다.
const
를 사용한다. const
키워드는 재할당을 금지하므로 var
, let
보다는 안전하다.