- var - 재선언 및 재할당 가능
- let - 재할당만 가능
- const - 상수기 때문에 재할당x
var는 재선언 및 재할당이 가능하고 함수 스코프를 사용하기 때문에 의도치 않은 버그를 만들 수 있어서 let과 const의 사용이 권장된다고 한다.
호이스팅
JS의 특성인 호이스팅은 변수나 함수의 선언이 코드의 최상단으로 끌어올려지는 것을 말한다.
이러한 특성으로 인해 특정 함수나 변수를 선언하기 전에 호출을 하여도 오류가 발생하지 않는다.
여기서 정확히 해야될 것은 변수의
선언은 호이스팅이 되지만
할당은 호이스팅이 되지 않는다는 것이다.
JS에서 변수 생성은 변수 선언 -> 변수 초기화 -> 변수 할당
의 단계로 이루어진다.
var는 선언과 초기화가 동시에 일어나기 때문에 var로 선언한 변수는 선언하기 전에 호출을 하여도 undefined라는 값을 가져온다.
하지만 let의 경우는 선언 ->초기화 ->할당의 순서로 일어나기 때문에 let으로 선언한 변수는 호이스팅될 때 초기화과정이 없이 선언만을 끌어올리게 되고 변수의 선언 전에 호출을 하게 되면 에러가 발생한다.
블록 스코프
let과 const는 블록스코프를 갖기 때문에 조건문,반복문에서 let이나 const로 선언된 변수는 해당 조건문이나 반복문 밖에서 접근할 수 없다.
<->var의 경우 함수 스코프를 갖기 때문에 해당 조건문이나 반복문 밖에서도 접근할 수 있다.
이러한 이유들로 인해 var의 사용보다는 let과 const를 사용해서 변수를 선언하는 것이 권장된다.
참고 자료 : 링크텍스트