아래 문제를 보고 글을 정리하게 되었다.
자바스크립트 실행 환경
예제 자바스크립트 코드를 수행 중인 실행 환경
스택에 존재하는 콜백 함수의 실행이 '끝나면' 해당 함수는 스택에서 pop된다.
스택이 완전히 비게 되면 이벤트 큐에서 이벤트 콜백을 받아온다.
비동기가 가능한 이유는? 브라우저에서 비동기 메소드 (setTimeout)을 위임해주기 때문에.
예제 코드의 실행 중 스택과 이벤트 큐, 브라우저 상태를 시간 흐름으로 나타낸 도식
setTimeout은 브라우저에게 위임
- 브라우저에 위임할 수 있는 API가 setTimeout말고 또 있는지?
정리해보면 1번이 아니라 2번인 이유는
- example 내에 있는 setTimeout 실행 -> 브라우저에게 처리를 위임하여 비동기로 돌아감
- example 내에 있는 work 실행 시작
- 시작 지점에서 3초가 지나고 setTimeout에 존재하는 goLunch가 이벤트 큐에 들어가지만 스택이 아직 클리어되지 않았으므로 실행되지 못함
- 시작 지점에서 5초가 지나고 work가 종료되고, example이 종료되어서 스택이 완전히 클리어됨
- 스택이 비었으므로 이벤트 큐에서 goLunch 함수를 가져와서 실행
모든 그림과 내용은 아래의 게시글에서 참조한 내용을 개인적으로 정리하였음
댓글 영역