정의: 함수의 인자로 들어가는 함수를 말한다.
역할은 두 가지이다.
1. 비동기를 동기화 시킬 때 사용
2. 어떤 함수의 구조에서 특정 부분을 커스터마이징 할 수 있도록 만들 때 사용
백엔드 개발자라면 보통 1번의 역할로 많이 사용할 것이다. 자바스크립트의 비동기 처리는 이벤트 루프를 통해 운영체제의 스레드 풀에게 요청해서 처리한다. 그리고 해당 비동기 처리가 끝나면 콜백 함수로 들어간 함수가 콜 스택에서 호출되서 js 메인 스레드에서 처리된다.
2번 역할의 대표적인 예시는 map, filter, reduce 같은 Array 내장 함수들이다. 이 함수들에 인자로 넣어주는 부분을 개발자가 원하는 대로 커스터마이징 할 수 있는 것이다. 이런 js 내장 기능 뿐만 아니라 실제 현업 코드에서 이 방식으로 콜백 함수를 사용하기도 한다고 코딩 애플이 말했다.
콜백 함수는 일급 함수를 지원하는 언어에서 주로 사용된다. 자바처럼 함수를 일급 객체로 처리하는 언어에서는 비슷한 기능을 함수에 인자로 함수를 넣는 것이 아닌 객체를 넣는 것으로 구현한다.

정의: 이벤트 처리 시스템
js 엔진 프로그램의 구성 요소인 것 같다.
이벤트나 비동기 기능 처리를 운영체제에게 요청하고 완료된 요청을 js 메인 스레드에서 마무리하도록 전달해주는 역할을 한다.
자바스크립트는 비동기 처리를 동기화 해야 할 때 콜백 함수를 같이 처리한다. 이 때 이벤트 루프는 운영체제에게 비동기 처리를 요청한다. 비동기 처리가 끝나고 뒤에 처리할 콜백 함수가 있다면 task queue에 넣어지고 이벤트 루프는 콜 스택이 비어 있다면 task queue에 있는 콜백 함수를 하나 하나 꺼내서 콜 스택에 올리며 처리하게 만든다.
너무 좋은 글이네요. 공유해주셔서 감사합니다.