클로저가 외부 값에 접근할 수 있는지를 판단하는 기준은 스코프입니다. 다음 코드를 실행하면 어떤 결과가 나올까요? 이번에도 웹 브라우저를 새로고침하고 실행해 보세요.
const func = () => {
console.log(a);
};
if (true) {
const a = 1;
func();
};
1이 출력될 것 같지만, Uncaught ReferenceError: a is not defined 에러가 발생합니다. func() 함수가 왜 변수 a에 접근하지 못하는지 알려면 a와 func() 함수가 선언된 위치를 봐야 합니다. func() 함수가 호출된 위치는 아무런 영향을 주지 않습니다.
변수 a는 if 문 안에서 선언되었고, func() 함수는 if 문 바깥에서 선언되었습니다. const는 블록 스코프이므로 if 문 바깥에서는 변수 a에 접근할 수 없습니다. func() 함수도 if 문 바깥에 있으므로 변수 a에 접근할 수 없습니다.