더북(TheBook)

만약 함수가 호출 스택의 최대 크기보다 더 쌓여야 한다면 어떻게 해야 할까요? 여러 해결 방법이 있는데, 비동기 함수를 사용하는 방법이 가장 간단합니다. 재귀 함수의 내부를 대표적인 비동기 함수인 setTimeout()으로 감싸고 시간은 0초로 해서 즉시 호출되게 하면 됩니다.

다음 코드는 recurse() 함수를 2만 번 호출하는 코드입니다. 하지만 이 코드를 실행해도 호출 스택의 최대 크기를 초과했다는 에러가 발생하지 않습니다.

let i = 0;
function recurse() {
  i++;
  if (i > 20000) return;
  setTimeout(recurse, 0);
}
recurse();
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.