다음과 같은 코드가 실행된다고 하자.
console.log("Hi!");
setTimeout(function timeout() {
console.log("Click the button!");
}, 0);
console.log("Welcome to loupe.");
console.log("Hi!")가 실행되어 Call Stack으로 들어간다. 그 후, 콘솔을 출력하고 해당 함수는 종료된다.
setTimeout 함수가 실행되어 Call Stack으로 들어간다.
setTimeout 함수가 종료되고 timeout이라는 콜백함수가 Web API에서 1초간 대기한다.
timeout에 관계 없이 다음 함수인 console.log("Welcome to loupe.")가 실행되어 Call Stack에 올라간다.
1초가 지나서 timeout 함수가 Callback Queue로 올라간다.
console.log("Welcome to loupe.")가 실행이 끝나고, Call Stack이 빈다.
Callback Queue에 있던 timeout 함수를 이벤트 루프가 Call Stack으로 옮긴다.
timeout함수가 실행되고, 함수 내부에 있던 console.log("Click the button!")이 실행되어 Call Stack에 올라간다.
console.log("Click the button!")의 실행이 끝난 뒤, timeout 함수도 종료된다.
https://www.youtube.com/watch?v=8aGhZQkoFbQ&feature=youtu.be