setTimeout()은 콜백을 이벤트 루프 큐에 넣지 않는다. 타이머를 설정할 뿐이다. 타이머가 끝나면 환경이 콜백을 이벤트 루프에 삽입한다.
비동기와 병렬은 아무렇게나 섞어 쓰는 경우가 많지만 그 의미는 완전 다르다. 비동기는 지금과 나중 사이의 간극에 관한 용어고 병렬은 동시에 일어나는 일들과 연관된다.
javascript는 문(statement) 단위의 스레딩이 아니고 문별 인터리빙이 발생하지 않는다. 함수 단위의 순서만 비결정적이다.
자바스크립트 프로그램은 언제나 2개 이상의 덩이로 쪼개지며 이벤트 응답으로 첫 번째 덩이는 '지금', 다음 덩이는 '나중'에 실행된다. 한 덩이씩 실행되어도 모든 덩이가 프로그램의 스코프/상태에 접근할 수 있으므로 상태 변화는 차례대로 반영된다.
doA(function() {
doc();
doD(function() {
doF();
});
doE();
});
doB();
실행 순서는?
A → B → C → D → E → F (?)
A → C → D → F → E → B (?)