
- 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) 빠지기 때문이다.
📌 초기화 하지 않으면, 변수를 참조할 수 없다!