0906
순환 참조란
- 자바스크립트 엔진은 코드를 실행하기 전에
- 파싱: 코드를 토큰으로 나누고 AST를 생성
- 컴파일: AST를 바이트 코드나 최적화 된 기계어(JIT)로 변환
- 실행: 위에서 컴파일 된 코드를 실제로 실행
과정을 거친다.
순환 참조란, 두 가지 이상의 객체/모듈함수가 서로를 직/간접적으로 참조하는 현상을 의미한다.
해당 현상이 발생하면 엔진이 코드를 실행하는 과정에서
- 초기화 순서를 결정하기가 어렵고
- 함수 호출이 무한 반복될 수 있다.
- 초기화 순서를 결정하기가 어려워지면 발생하는 문제점
- 모듈이 완전히 로드되기 전에 다른 모듈이 그 값을 참조하려 하면 undefined가 발생할 수 있고, 에러가 발생할 수 있다.
- 함수 호출이 무한 반복되면 발생하는 문제점
- 가비지 컬렉션이 있긴 하지만, 자바스크립트는 콜스택에 실행 코드가 쌓이기 때문에 이가 무한 반복되면 스택 오버플로가 발생하여 프로그램이 중단되거나 브라우저 프로세스가 크래시 될 수 있다.