{ console.log("2"); // async(비동기) }, 3000); console.log("3"); // sync(동기)"> { console.log("2"); // async(비동기) }, 3000); console.log("3"); // sync(동기)"> { console.log("2"); // async(비동기) }, 3000); console.log("3"); // sync(동기)">
console.log("1"); // sync(동기)
setTimeout(() => {
console.log("2"); // async(비동기)
}, 3000);
console.log("3"); // sync(동기)
전역 setTimeout()
메서드는 만료된 후 함수나 지정한 코드 조각을 실행하는 타이머를 설정합니다.
동기는 먼저 이전의 것이 끝나야 다음 것을 할 수 있지만 비동기는 1번을 하면서 2번을 할 수 있고 3, 4번도 할 수 있다.
자바스크립트는 한 줄 실행하고 또 다음 줄 실행하는 동기 언어입니다.
하지만 위에 setTimeout
에 콜백 함수를 실행하는 비동기 코드를 사용했습니다.
이것은 어떻게 된 걸까요?
setTimeout(() => {
console.log("1");
}, 1000);
console.log("2");
위에 setTimeout
도 보면 사실 자바스크립트의 부분이 아닙니다.
브라우저에서 사용을 한다면 브라우저 api를 사용하는 것이며 (window
object),
Node 에서 사용한다면 Node api를 사용하는 것입니다 (global
object).
결국, 자바스크립트는 비동기처럼 사용할 수 있지만, 결국은 다른 것의 도움을 받아서 비동기처럼 사용할 수 있습니다.