
setTimeout과 같은 함수는 JS Engine이 기본적으로 제공하는 것이 아니라 브라우저에서 제공하는 web API이다.web API 의 호출을 제어하기 위한 call back queue와 event queue가 있다.
비동기 콜백은 실행되지 않기 때문에 call stack에 올라가지 않고 Event Queue에 들어가서 대기하게 된다.JS Runtime 안에 Event Queue가 있다.
DOM Event (click 등), HTTP Request, setTimeout 등의 web API는 비동기 콜백을 갖고 있다.
ex) addEventListener에 click message와 callback을 인자로 전달한다.
button.addEventListener('click', event => {
button.innerHTML = `클릭 수: ${event.detail}`;
});
Runtime이 Web API를 만나면 비동기 콜백 함수를 Event Queue에 넣는다.
Runtime은 Call Stack이 빌 때를 모니터하고, 빌 때 Event Queue에서 콜백을 가져와서 실행시킨다.

<script src=”…” /> 이런 걸 만났다고 생각해보자.
