Macro Task Queue, Micro Task Queue 두 개로 구분되며 Task Queue 와는 별개로 처리하는 AnimationFrameQueue 가 존재한다. 또한 이 3개의 Queue는 여러가지 비동기 작업을 처리하는데에 있어서 우선순위가 존재한다!
1.animation 2. micro 3. macro<>
-> 만약 코드 내에 setTimeout과 Promise().then 문이 있다고 해보자.
먼저 코드평가과정을 거치며 변수 및 변수에 할당된 함수들은 호이스팅되어 메모리 공간을 차지할 것이다. 그 후, 런타임 시기가 되면 callstack에 anonymous를 포함한 모든 수행 작업들이 callstack을 거치며 수행될 것이고, 읽어들인 코드가 setTimeout과 Promise().then 이라는 비동기 함수라면 둘 다 web api를 거쳐 각각 Macro Task Queue 와 Micro Task Queue로 이동하여 대기한다. 그리고 Event Loop가 수시로 확인하여 callstack이 비어있으면 비동기를 제외한 모든 코드가 실행된 것이므로 task queue중 우선순위가 제일 높은 Micro Task Queue에 대기하고 있던 Promise().then 이 먼저 callstack으로 이동하여 수행하고 빠지게 되며 마지막으로 Macro Task Queue에 있던 setTimeout 함수가 이동하여 콜백 함수를 실행한 뒤 빠지게 되며 모든 코드 실행은 종료되게 된다.
=> 위와 같은 JS엔진의 동작 방법을 알고 최적화된 코드를 짜는 것이 중요할 것 같다!