var
- 쓰지않는 걸 추천!!!
- 호이스팅 시 선언 단계와 초기화 단계가 한번에 이루어짐
- 지역변수와 전역변수의 경계가 모호
- 같은 이름의 변수 선언 가능
호이스팅(Hoisting)이란,
var나 function의 선언문을 해당 스코프의 가장 선두로 옮긴 것과 같은 동작 특성을 뜻함
문제 1) 호이스팅시 변수의 선언과 초기화(undefined으로)를 같이 함

문제 2) 함수만 지역변수로 호이스팅이 되고 나머지는 다 전역변수로 올라옴

- 전역변수 : 블락 밖에서 선언을 한 어디서든 쓰일 수 있는 변수
- 지역변수 : 블락 {}안에서 선언된 변수, 블락안에서만 쓸 수 있음
문제 3) 같은 이름의 변수가 두개여도 허용

let
- ES6 버전에서 새로 나옴
- var의 문제점 해결
- 호이스팅 개념 :
TDZ(Temporal Death Zone)
- a가 호이스팅으로 기억이 됨
- 하지만, a 선언문이 나오기 전까지는 a를 사용할 수 없음
- 일시적으로 선언전에는 죽은 존이 됨 (TDZ)
선언 단계 > 초기화 단계 > 할당 단계 걸쳐 변수가 생성됨
해결 1) 호이스팅시 변수의 선언과 초기화를 따로 함

해결 2) 지역변수와 전역변수의 구분이 명확

해결 3) 같은 이름의 변수가 허용하지 않음

const
- 한번 할당하면 재할당 안됨
- 바뀌면 안되는 고정시켜야 하는 값들을 const로 선언
- 상수를 만드는 것
📌 자바스크립트의 호이스팅
- 자바스크립트 코드를 구현
- 코드가 실행되기 전에 자바스크립트 엔진이 선언된 변수를 먼저 조사함
- 선언된 변수를 메모리에 가져가 저장함
- 코드 실행 시 메모리에 저장된 변수를 가져가 사용
정리
- var
- let
- 재할당만 가능

- const
- 재선언, 재할당 불가능
