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; // Uncaught SyntaxError: Identifier 'bar' has already been declared

let 키워드의 호이스팅

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

하지만 let, const 키워드로 선언된 변수는 선언단계와 초기화 단계가 분리되어 진행된다.

const 키워드

  • 재할당, 재선언 불가
  • 상수를 주로 사용
  • 변수 자체를 재할당할 순 없지만 객체의 프로퍼티는 변경 가능하다.
1
2
3
4
5
6
7
8
9
const user = { name: "Lee" };

// const 변수는 재할당이 금지된다.
// user = {}; // TypeError: Assignment to constant variable.

// 객체의 내용은 변경할 수 있다.
user.name = "Kim";

console.log(user); // { name: 'Kim' }