본문 바로가기

카테고리 없음

Section2-2 : Asynchronous Callbacks

자바스크립트는 동시에 다른게 실행 안된다며? ( sync )


 

- 맞다. javascript code는 한번에 한 line씩 차례대로 실행이 된다. 근데 웬 async? 설명하기 전에 간단한 예제를 살펴보자.

정답이 무엇일까? ( 정답 흰색으로 되어 있음 ) - finished execution -> finished function -> click event

이유 : 
 1) 위의 js 코드가 로드 되면서 global execution context가 생성된다. 그리고 waitThreeSeconds()가 호출되면서 execution context가 생성된다. 그럼 첫번째로 console이 찍히고, 그다음 global에 있는 console이 찍힌다.

 2) global이 다 실행이 되고, execution context stack이 비게 되면 event queue에서 click을 받아와서 ClickHandler와 관련된 execution context를 생성해준다. 즉 이때 console이 찍히게 된다. 

 자바스크립트가 sync하게 동작한다는 부분이 위에 해당된다. execution stack이 다 비어야지 event queue에서 빼내와서 그 함수에 해당하는 execution context을 생성하고 실행한다.


click에 event 다는거 async 아니야?

맞다. 맞으면 javascript는 sync하게 동작한다는 말은 틀렸네? 
아니다. 위에서 본 것은 javascript engine 내에서 동작하는 것을 얘기한다. 즉 javascript는 sync하게(stack에서 하나하나씩 실행) 동작한다. async하게 동작하는 것은 javascript engine 밖의 얘기다. click 됐을 때 event queue에 던지고 다른일 하고 있겠지 머..... ( 밑에 그림 참고 )