현재 실행 중인 코드가 완료된 후에야 다음 코드를 실행하는 방식
현재 실행 중인 코드의 완료 여부와 무관하게 즉시 다음 코드로 넘어가는 방식
CPU에 계산에 의해 즉시 처리가 가능한 대부분의 코드는 동기적인 코드이며, 별도의 요청, 실행 대기, 보류 등과 관련된 코드는 비동기적인 코드이다.
비동기적인 일련의 작업을 동기적으로, 혹은 동기적인 것처럼 보이게끔 처리해주는 장치를 마련하고자 ES6에서는 Promise, Generator 등이 도입됐고, ES2017에서는 async/await가 도입되었다.
setTimeout 함수의 작업 완료 여부를 신경쓰지 않고 다음 작업 수행 -> 비동기setTimeout 함수가 타이머 작업을 수행하기 위해 메인 함수를 블락하지 않고 백그라운드에서 별도로 처리 -> 논블로킹