더북(TheBook)

클로저가 외부 값에 접근할 수 있는지를 판단하는 기준은 스코프입니다. 다음 코드를 실행하면 어떤 결과가 나올까요? 이번에도 웹 브라우저를 새로고침하고 실행해 보세요.

const func = () => { 
  console.log(a);
};
if (true) {
  const a = 1;
  func();
};

1이 출력될 것 같지만, Uncaught ReferenceError: a is not defined 에러가 발생합니다. func() 함수가 왜 변수 a에 접근하지 못하는지 알려면 afunc() 함수가 선언된 위치를 봐야 합니다. func() 함수가 호출된 위치는 아무런 영향을 주지 않습니다.

변수 aif 문 안에서 선언되었고, func() 함수는 if 문 바깥에서 선언되었습니다. const는 블록 스코프이므로 if 문 바깥에서는 변수 a에 접근할 수 없습니다. func() 함수도 if 문 바깥에 있으므로 변수 a에 접근할 수 없습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.