Web Basic · ES2015

let·const와 블록 스코프의 예측 가능성

let과 const는 var를 대체하는 취향 문제가 아니라, 변수가 살아 있는 범위를 블록으로 제한해 값 추적을 단순하게 만드는 문법이다.

01

블록 진입

if, for, while, switch, 중괄호 블록마다 let/const의 범위가 새로 생긴다.

02

선언 평가

선언 전 접근은 temporal dead zone 때문에 ReferenceError가 난다.

03

값 변경

let은 재할당 가능하지만 const는 같은 binding에 새 값을 넣을 수 없다.

04

객체 변경

const 객체의 속성 변경은 binding 재할당과 다르므로 가능하다.

let
변하는 지역 값 loop index, 단계별 계산처럼 재할당이 필요한 경우
범위를 최대한 좁힌다
const
기본 선택 재할당 의도가 없는 값과 함수 참조에 사용
불변 객체를 의미하지 않음
var
레거시 함수 스코프 블록을 무시해 예상 밖 값 공유가 생김
새 코드에서는 피한다
TDZ
선언 전 접근 차단 초기화 전 변수를 읽는 실수를 빠르게 드러냄
hoisting 설명과 함께 이해

기본값 · 루프 · 스코프 점검

기본값 재할당이 필요할 때만 let을 쓰고 나머지는 const로 둔다.
루프 비동기 콜백 안에서 index가 의도대로 캡처된다.
스코프 변수가 필요한 가장 작은 블록 밖으로 새지 않는다.
불변성 객체 내부 변경 금지는 Object.freeze나 구조 설계로 따로 다룬다.

블록 스코프 비교

for (let i = 0; i < 3; i += 1) {
  setTimeout(() => console.log(i), 0);
}