JavaScript/모던자바스크립트 딥다이브

[딥다이브] 15장 let, const 키워드와 블록레벨 스코프

let

let은   이름이 같은 변수를 중복선언하면 문법에러가 발생한다. (변수 중복 선언 금지)

let은   블록레벨 스코프를 따른다. 

let foo = 1; // 전역 변수

{
  let foo = 2; // 지역 변수
  let bar = 3; // 지역 변수
}

console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined

 

변수 호이스팅

let 키워드로 선언한 변수는 선언단계와 초기화 단계가 분리되어 진행된다.  (var는 같이진행된다)

만약 초기화 단계가 실행되기 이전에 변수에 접근하려하면 참조에러( ReferenceError)가 발생한다.

let으로 선언한 변수는 스코프의 시작지점부터 초기화 단계 시작 지점까지 변수를 참조할수없다.

스코프시작 지점부터  초기화 시작지점까지의 변수를 참조할수없는 구간을 일시적 사작지대 (TDZ - Temporal Dead Zone) 이라한다.

let foo = 1; // 전역 변수

{
  let foo = 2; // 지역 변수
  let bar = 3; // 지역 변수
}

console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined

let 또한 호이스팅이 호이스팅이 발생하지 않는것처럼 동작한다. (발생한다는소리 참조에러.. )

 

 

const

const 는 반드시 선언과 동시에 초기화 해야한다.

const 또한 블록레벨 스코프를 가지며 호이스팅이 발생하지 않는것처럼 동작한다.

const 는 let과 달리 재할당이 금지된다.

const는 상수이며 상수는 재할당이 금지된 변수를 말한다.

유지보수의 편의를 위해 적극사용하자.

const 로선언된 뷴수에 원시값을 할당한 경우 값을 변경할수없다. 하지만 const 로 선언된 변수에 객체를 할당한경우 변경할수있다.

const는 재할당을 금지할뿐 불변을 의미하지는 않는다.