다른 두 키워드와 차이가 있는 부분에 강조를 하였습니다.
var
- 가장 기본적인 변수 선언 키워드
- 기존에 선언된 전역변수와 같은 이름의 지역변수를 선언할 수 있음
- 함수 스코프
- 초기화 없이 선언 가능
- 선언 전에 사용 가능
- 해당 스코프에서 선언을 하기는 해야 함
- 호이스팅: 변수의 선언이 스코프의 상단으로 '끌어올려지는' 것
- hoist: 끌어올리다
- 실제로는 컴파일 단계에서 메모리에 저장되는 것이지만 스코프 상단에 선언한 것과 비슷한 결과이기 때문에, 이미지 상 그렇게 부르는 듯
- 함수에서도 호이스팅이 일어나는데, 본 포스트의 주제와는 거리가 있으므로 자세한 내용은 링크로 대체
let
- 개선된(?) 변수 선언 키워드
- 스코프가 달라도 동명의 변수를 선언할 수 없음
- 블록 스코프
- 초기화 없이 선언 가능
- 선언 전에 사용 불가
const
- 상수 선언 키워드
- 객체 내 속성(property)의 변화는 막을 수 없음
- 이를 막기 위해서는 Object.freeze() 메소드를 활용할 수 있으나, 이 경우에는 객체 내 객체의 속성 변화를 막을 수 없음 ("얕은 동결")
- 스코프가 달라도 동명의 변수를 선언할 수 없음
- 블록 스코프
- 선언시 초기화 필요
- 선언 전에 사용 불가
참고한 곳