1. 비동기성: 지금과 나중

이벤트 루프

setTimeout()은 콜백을 이벤트 루프 큐에 넣지 않는다. 타이머를 설정할 뿐이다. 타이머가 끝나면 환경이 콜백을 이벤트 루프에 삽입한다.

병렬 스레딩

비동기와 병렬은 아무렇게나 섞어 쓰는 경우가 많지만 그 의미는 완전 다르다. 비동기는 지금과 나중 사이의 간극에 관한 용어고 병렬은 동시에 일어나는 일들과 연관된다.

완전-실행

javascript는 문(statement) 단위의 스레딩이 아니고 문별 인터리빙이 발생하지 않는다. 함수 단위의 순서만 비결정적이다.

자바스크립트 프로그램은 언제나 2개 이상의 덩이로 쪼개지며 이벤트 응답으로 첫 번째 덩이는 '지금', 다음 덩이는 '나중'에 실행된다. 한 덩이씩 실행되어도 모든 덩이가 프로그램의 스코프/상태에 접근할 수 있으므로 상태 변화는 차례대로 반영된다.

2. 콜백

doA(function() {
	doc();
	
	doD(function() {
		doF();
	});

	doE();
});

doB();

실행 순서는?

A → B → C → D → E → F (?)

A → C → D → F → E → B (?)