- ES5 까지는 var 로 변수 선언이 가능했지만, var 의 여러 문제, 한계점으로 인해 ES6 부터는
const
와let
이 나오게 되었다.- 변수의 재선언과 호이스팅을 방지하기 위해
1️⃣ 선언 - 변수를 선언
2️⃣ 초기화 - 변수를 선언하면 자바스크립트는 해당 변수를 인식하여 그 변수에 값을 저장할 수 있도록 메모리 공간을 만들게 된다. 초기값으로 undefined 값을 할당하여 초기화한다.
3️⃣ 할당 - 변수에 값을 저장
1️⃣ 재선언 및 재할당이 가능
- 같은 이름의 변수명을 여러번 쓰게되면 추후에 디버깅 측면에서 어려움이 있다.
(이 문제점으로 ES6 에 let, const 가 추가 된다.)2️⃣ 함수 레벨 스코프
1️⃣ 재선언 불가능 / 재할당 가능
2️⃣ 블록 레벨 스코프
1️⃣ 재선언 및 재할당 불가능
2️⃣ 선언 시 초기화와 값 할당을 해주어야 한다.
3️⃣ 블록 레벨 스코프
immutable
여부. let
은 재할당이 가능하지만, const
는 재할당이 불가능하다는 점
var
를 사용했을 경우, 선언 + 초기화가 동시에 이루어진다. 그래서 변수 선언 이전에 해당 변수를 참조할 경우에undefined
가 출력된다. (초기화한 상태로 메모리에 저장되기 때문에)let
과const
을 사용했을 경우, 변수 선언 시에 초기화를 하지 않는다. 그래서 변수 선언 이전에 해당 변수를 참조할 경우에ReferenceError
가 발생하게 된다. (초기화되지 않은 상태로 메모리에 저장되기 때문에)
👉🏻let
과const
로 선언된 변수는 스코프 시작에서 변수의 선언(초기화 시작 전) 까지 일시적 사각지대(TDZ) 빠지기 때문이다.
📌 초기화 하지 않으면, 변수를 참조할 수 없다!