블록 스코프

var와 let 스코프

MDX 예제의 핵심은 `if`와 `for` 안에서 만든 이름이 어디까지 살아 있는지, 그리고 선언 전에 읽었을 때 어떤 오류가 드러나는지입니다.

var

블록 밖에서도 보일 수 있음

`if` 블록은 `var`의 경계가 아닙니다.
if (true) {
  var x = 10;
}
console.log(x); // 10

함수 안에서 선언했다면 함수가 경계가 되고, 함수 밖 전역에서 선언했다면 블록을 빠져나와도 이름이 남습니다.

let

선언된 블록 안에서만 유효

`for` 카운터도 반복문 밖으로 새지 않습니다.
for (let i = 0; i < 3; i++) {
  console.log(i);
}
// console.log(i); ReferenceError

블록 안에서 필요한 이름을 블록 안에 가두기 때문에 이름 충돌과 실수로 덮어쓰는 위험이 줄어듭니다.