top-level await 와 마이크로태스크큐
top-level await 를 사용하면, 전역 컨텍스트가 비워지기 전에, 콜스택에 마이크로태스크큐의 작업이 들어가는걸까?
- top-level await은 모듈에서만 사용가능하다.
- top-level await을 포함한 모듈은 그 자체가 비동기적으로 처리된다.
- 이 모듈을 import 하는 다른 모듈은 await 이 해결 될 때 까지 실행이 중단된다.
- top-level await은 모듈 전체의 평가와 실행을 비동기적으로 만든다.
그럼 top-level await 를 사용할 때, 해당 모듈의 전역 컨텍스트는 없는걸까?
- top-level await 을 사용하는 모듈은, 특별한 "중단 가능한 실행컨텍스트"를 생성한다.
- 이 컨텍스트는 콜 스택에서 완전히 제거되지 않고, 일종의 대기상태로 진입한다.
- 이 상태에서 자바스크립트 엔진은 다른 작업을 처리할 수 있다.
그럼 중단된 실행컨텍스트는 어디로 갈까?
- 힙 메모리에 저장된다.
- 실제로는 함수의 상태가 저장되고, 나중에 새로운 실행 컨텍스트에서 그 상태를 복원하는 것