출처

자바스크립트 - 동기(Synchronous)? 비동기(asynchronous)?

JavaScript는 동기식 언어이다.

자바스크립트는 한 번에 하나의 작업을 수행한다.

한 작업이 실행되는 동안 다른 작업은 멈춘 상태를 유지하고 자신의 차례를 기다리는 것을 말한다.

마치 음식점에 여러 사람들과 갔을 때, 키오스크를 이용하여 한 사람씩 결제하는 것과 유사하다.

이러한 동작을 **단일 스레드(싱글 스레드), 동기(Synchronous)**라고 부른다.

console.log("hi");
console.log("hello");
console.log("bye");

이렇게 console.log()를 세 개를 입력하고, 출력 결과를 확인해보면

https://blog.kakaocdn.net/dn/lg1rE/btqFP8SpF5R/khFzUYf2GJ0Xy3O9J4dnWk/img.png

이렇게 순서대로 "hi", "hello", "bye"가 찍히는 것을 확인할 수 있다.

그렇다면 왜 이렇게 나오는 것일까?

그것은 바로 Javascript의 Engine(V8)을 까 보면(?) 알 수 있다.

https://blog.kakaocdn.net/dn/8XRnQ/btqFQKwWMDa/pX0jhdyajUYb1OOQKMfR01/img.png

출처 : https://blog.sessionstack.com/how-does-javascript-actually-work-part-1-b0bacc073cf

일단 Memory Heap과 Call Stack은 자바스크립트의 엔진의 주요 구성 요소이다.

Memory Heap이란?

변수와 객체의 메모리 할당을 담당하는 곳을 말한다.

Call Stack이란?

함수가 호출이 되면 쌓이는 곳이다. 대신 함수가 쌓이는 순서와는 반대로 실행된다.