var 키워드
- 함수레벨 스코프
- 생략 가능
- 변수 재선언, 재할당 가능
- 변수 호이스팅: 선언 이전에 참조할 수 있다.
- 전역 변수로 선언 시 전역 객체의 프로퍼티로 등록
let 키워드
1 2 3 4 5 6 7 8 9
| let foo = 123; // 전역 변수
{ let foo = 456; // 지역 변수 let bar = 456; // 지역 변수 }
console.log(foo); // 123 console.log(bar); // ReferenceError: bar is not defined
|
1 2 3 4 5
| var foo = 123; var foo = 456;
let bar = 123; let bar = 456;
|
let 키워드의 호이스팅

var
키워드로 선언된 변수는 선언단계와 초기화 단계가 동시에 일어난다.

하지만 let
, const
키워드로 선언된 변수는 선언단계와 초기화 단계가 분리되어 진행된다.
const 키워드
- 재할당, 재선언 불가
- 상수를 주로 사용
- 변수 자체를 재할당할 순 없지만 객체의 프로퍼티는 변경 가능하다.
1 2 3 4 5 6 7 8 9
| const user = { name: "Lee" };
user.name = "Kim";
console.log(user);
|