자바스크립트의 콜 스택 (호출 스택) 에 관하여 알아보았다
포스팅 끄트머리에서 ‘자바스크립트는 싱글 스레드 언어이지만 비동기 작업이 가능하다' 라고 적으면서 비동기 콜백에 관하여 간단하게 소개했었다
스레드가 하나밖에 없다면서 어떻게 비동기 동작이 가능하냐고~~~ 싶은데, 자바스크립트 자체는 비동기를 지원하지 않아도 브라우저랑 Node 엔진이 지원하기 때문이다
이전 포스팅에서는 호출 스택을 중점적으로 다루고 이벤트 루프는 맛보기 정도로만 적었으므로 이번에는 이벤트 루프를 좀 더 자세히 적어보려 한다 (사실 끄트머리에 있는 내용을 여기로 옮길까 했는데 굳이? 싶어서..)
저번에 썼던 사진..
let i = 0;
setTimeout(() => {
console.log("bye");
}, 50);
let arr = [];
while (i < 1000000000) {
i++;
}
console.log(i);
setTimeout(() => {
console.log("hello");
}, 30);
hello
가 대기 시간이 제일 짧으니까 가장 먼저 출력되고, bye
가 출력되고, while
문을 기다린 후 i
가 출력될 것이다bye
가 가장 위에 있으니까 가장 먼저 출력되고, i
가 출력되고, hello
가 출력될 것이다while
문이 가장 먼저 실행되며 i
가 출력되고, hello
가 대기 시간이 더 짧으므로 먼저 출력되고, 마지막에 bye
가 출력될 것이다while
문이 가장 먼저 실행되며 i
가 출력되고, bye
가 가장 위에 있으니까 먼저 출력된 후 hello
가 출력될 것이다bye
→ i
→ hello
이고, 비동기 함수인 setTimeout
중 콜백 큐에 올라가는 순서는 bye
→ hello
이다