let과 const

ES5까지는 var 키워드로 변수를 선언했었는데, 이는 중복 선언이 가능하며 Function-level scope를 가진다. 사용에 따라서는 편리할수도 있으나 우리들의 전통적인(?) 코딩 스타일에는 부합하지 않아서 의도하지 않은 결과를 내곤 했는데, ES6 에서는 이를 개선한 변수 선원 키워드가 등장했다.

ES6의 letconst 키워드는 Block-level scope를 지원한다.


let 의 특징

  • Block-level scope
let a = "global";
let g = "global";
{
    let a = "block";
    let b = "block";

    console.log(a); // output: "block";
    console.log(g); // output: "global";
}
console.log(a); // output: "global";
console.log(b); // error
  • 변수 중복 선언 불가
var a = 111;
var a = 222;

console.log(a); // output: 222;
var a = 111;
var a = 222; // error
  • 호이스팅 불가

코드 내에 존재하는 변수가 선언되기 전에 호출된 경우, 해당 변수를 미리 메모리 할당해주는 기술을 호이스팅(hoisting) 이라고 한다. 메모리 할당만 해줄 뿐 코드대로 초기화까지는 진행하지 않기 때문에 호이스팅으로 선언된 변수는 undefined 값을 가지게 된다.

호이스팅을 지원하지 않는 let 은 선언 전에 호출된 경우 error 를 내게 된다.

console.log(a); // undefined
var a = 1;

console.log(b); // error
let b = 2;

const 의 특징

const 는 상수를 정의하는데 사용된다.

  • Block-level scope
  • 재할당 불가능
let a = 111;
a = 222; // input: 222;

const b = 111;
b = 222; // error

References

https://takeuu.tistory.com/86?category=737612 [워너비스페셜]