<aside> 💡 자바스크립트는 싱글 스레드 언어임

따라서 기본적으로 동기적으로 실행됨

문제: 실행이 오래걸리는 작업이 있으면 비효율적임

⇒ 반드시 비동기적으로 실행되는 코드가 필요함.

</aside>

동기

비동기

예제

function task1() {
	console.log("task1")
}

function task2() {
	console.log("task2")
}

task1()
task2()

<aside> 💡 몇번을 실행해도 1 -> 2 순서로 실행 동기적으로 실행되기 때문에 1의 실행기 끝나길 기다렸다가 2를 실행함

</aside>

function task1() {
	setTimeout(() => {console.log("task1")}, 1000); // 비동기 처리를 맡기는 코드
	// setTimeout에 코드 실행을 맡김
}

function task2() {
	console.log("task2")
}

task1()
task2()

<aside> 💡 setTimeout에게 task1을 출력하는 작업을 맡기고 task2 실행함. 이 둘의 순서를 보장할 수 없음

</aside>

반드시 task1 → task2로 순차적으로 진행되어야 한다면??

해결방법

콜백 함수

<aside> 🔥 다른 함수의 매개변수로 전달되어 그 함수가 실행되는 동안 특정 시점에 호출되는 함수

</aside>

동기 콜백 함수