위키백과의 정의는 다음과 같다.
컴퓨터 과학에서 비동기 입출력 또는 비순차 입출력은 데이터 전송을 마치기 전에 기타 프로세스가 계속하도록 허가하는 입출력 처리의 한 형태이다. 컴퓨터에서의 입출력 기능은 데이터 처리 시 보다 상당히 느릴 수 있다 능률을 위해서는 비동기적으로 작업, 심플한 작업이라면 동기적 처리방식을 적용해도 된다.
이해하기 좋은 이미지가 있어 가져와보았다. 출처: 벨로퍼트와 함께하는 모던 자바스크립트
비동기적 처리를 위해서는 sync가 없는(콜백함수를 갖고 있는) 함수를 사용한다. sync는 리턴 값을 주지만, sync가 없는 함수는 리턴 값을 주지 않아 콜백이 있어야 한다.
fs.readdir(path[, options], callback) //비동기적
fs.readdirSync(path[, options]) //동기적
콜백을 그대로 해석하면 다시 전화하라는 뜻이다. 요 의미를 들여다 보면, 필요에 따라 (시간이 걸리는 것은) 나중에 처리할 수 있는 함수라는걸 알 수 있다.
아래 예시의 두 번째 함수는 익명 함수인데, 변수에 함수를 지정한 것이다. 자바스크립트에서는 함수가 값으로(인자로) 들어갈 수 있다. 마지막 줄에서 a라는 변수가 담고 있는 값인 함수를 실행하는 것이다.
function a() {
console.log('A')
}
var a = function () {
console.log('A')
}
a();