callback은 부르다(call)+되돌아오다(back)의 합성어로, 되돌아 호출해달라는 명령이다. X라는 어떤 함수를 호출하면서 특정 조건일 때 Y함수를 실행해 알려달라는 요청을 함꼐 보내는 것이다. 이처럼 함수 B는 해당 조건이 갖춰줬는지 여부를 스스로 판단하고 Y함수를 직접 호출한다.
<aside> 💡 콜백 함수는 다른 코드(함수 또는 메서드)에게 인자로 넘겨줌으로써 그 제어권도 함께 위임한 함수이다.
</aside>
콜백 함수를 위임받은 코드는 자체적인 내부 로직에 의해 이 콜백 함수를 적절한 시점에 실행할 것이다.
만약 6시에 기상해야 한다면, 6시로 알람을 맞출것이다.
<aside> ⏰ 이는 사용자가 시계(함수)에게 요청을 하면서 알람을 울리는 명령에 대한 제어권을 시계에게 넘겨주는 것이다.
</aside>
이렇듯 콜백 함수는 제어권과 관련이 깊다.
콜백 함수와 비동기의 대표적인 예로는 setInterval
함수가 있다.
// 구조
setInterval(func, delay[, param1, param2, ...]);
// 사용예
// ---코드 추가---
setInterval
은 다른 코드에 첫 번째 인자로서 함수로 넘겨주면, setInterval
은 해당 함수에 대해 제어권을 넘겨받는다. 이후 setInterval
이 스스로의 판단에 따라 적절한 시점에 익명 함수를 실행한다.
<aside> 💡 이처럼 콜백 함수의 제어권을 넘겨받은 코드는 콜백 함수 호출 시점에 대한 제어권을 가진다.
</aside>
콜백 함수에서 매개변수로 this(thisArg
)를 넘겨받는 경우가 있다. 이때 this를 생략해 넘겨줄 경우에는 일반적인 함수와 마찬가지로 전역객체가 바인딩된다.