# let & const

ES5에서 사용하던 var 키워드를 ES6에서는 const, let로 대체합니다.

# 특징

  • 재선언, 재할당

const - 재선언 재할당 모두 불가능(Array, Object 경우에는 재할당이 가능하다.)

let - 재선언 불가능, 재할당 가능

let yourName = "Kim";
const myName = "Sam";

yourName = "Bob";
console.log(yourNameName);

myName = "Tom"; // TypeError: Assignment to constant variable.
console.log(myName);
  • 이중 선언이 안됌
// ES5
var name = "Kim";
console.log(name); // Kim
var name = "Sam";
console.log(name); // Sam

// ES6
let name = "Kim";
console.log(name); // Kim
let name = "Sam"; // Uncaught SyntaxError: Identifier 'name' has already been declared
console.log(name);
  • 호이스팅 특성

호이스팅이란 var, function 등으로 선언을 하면 해당 스코프의 상위로 옮기는 작업을 의미 합니다. 자바스크립트 ES6에서는 let, const도 호이스팅을 합니다. 하지만 var와 달리 let으로 선언된 변수는 참조 에러를 발생시킵니다.

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

console.log(b); // Error: Uncaught ReferenceError: b is not defined
let b;
  • block scope

let, const 선언은 블록 스코프({})의 범위를 가지는 지역 변수 입니다. 선언과 동시에 임의의 값으로 초기화가 가능합니다.

let x = 1;
if (x === 1) {
  let x = 2;
  console.log(x); // 2
}
console.log(x); // 1