var
키워드로 선언한 변수의 문제점let
키워드변수 중복 선언 금지
let
키워드로 이름이 같은 변수를 중복 선언하면 문법 에러가 발생let foo = 123; // 123
let foo = 456; // Syntax error
블록 레벨 스코프
모든 코드 블록 (if
문, for
문, while
문, try/catch
문 등)을 지역 스코프로 인정
let foo = 1; // 전역 변수
{
let foo = 2; // 지역 변수
let bar = 3; // 지역 변수
}
console.log(foo); // 1
console.log(bar); // Reference error
변수 호이스팅
let
키워드로 선언한 변수는 변수 호이스팅이 발생하지 않는 것처럼 동작let
키워드로 선언한 변수는 '선언 단계'와 '초기화 단계'가 분리되어 진행console.log(foo); // Reference error
let foo; // 초기화 단계
console.log(foo); // undefined
foo = 1; // 할당 단계
console.log(foo); // 1
let
, const
를 포함해서 모든 선언(var
, let
, const
, function
등)을 호이스팅하지만, ES6에서 도입된 let
, const
, class
를 사용한 선언문은 호이스팅이 발생하지 않는 것처럼 동작전역 객체와 let
let
키워드로 선언한 전역 변수는 전역 객체의 프로퍼티가 아님window.foo
와 같이 접근할 수 없음const
키워드const
키워드로 선언한 변수는 반드시 선언과 동시에 초기화const foo; // Syntax error
const
키워드로 선언한 변수는 재할당이 금지됨 (TypeError
발생)const
키워드로 선언한 변수에 원시 값을 할당한 경우 변수 값을 변경할 수 없음const
키워드와 객체const
키워드로 선언된 변수에 객체를 할당한 경우 값을 변경할 수 있음const person = {
name : 'Lee';
};
person.name = 'Kim';
console.log(person); // {name: 'Kim'}