{ 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()

전역 setTimeout() 메서드는 만료된 후 함수나 지정한 코드 조각을 실행하는 타이머를 설정합니다.

Untitled

둘의 차이

동기는 먼저 이전의 것이 끝나야 다음 것을 할 수 있지만 비동기는 1번을 하면서 2번을 할 수 있고 3, 4번도 할 수 있다.

Untitled

Javascript는 동기 언어입니다.

자바스크립트는 한 줄 실행하고 또 다음 줄 실행하는 동기 언어입니다.

하지만 위에 setTimeout에 콜백 함수를 실행하는 비동기 코드를 사용했습니다.

이것은 어떻게 된 걸까요?

setTimeout(() => {
  console.log("1");
}, 1000);
console.log("2");

비동기 코드를 작성하기 위해서 자바스크립트 이외의 도움을 받습니다!

위에 setTimeout도 보면 사실 자바스크립트의 부분이 아닙니다.

브라우저에서 사용을 한다면 브라우저 api를 사용하는 것이며 (window object),

Node 에서 사용한다면 Node api를 사용하는 것입니다 (global object).

결국, 자바스크립트는 비동기처럼 사용할 수 있지만, 결국은 다른 것의 도움을 받아서 비동기처럼 사용할 수 있습니다.

내부에서 어떻게 진행되는지 살펴보기