다른 코드의 인자로 넘겨주는 함수를 콜백함수
라고 한다.
넘겨준다는 것은 넘겨받는 것도 있다는 것.
forEach
와 setTimeout
등이 있다.
콜백함수를 넘겨받은 위와 같은 코드(forEach, setTimeout)는 이 콜백 함수를 필요에 따라 적절한 시점에 실행하게 된다. 제어권이 그들에게 있다는 것.
다시 말하면, 제어권을 넘겨줄테니 너의 로직으로 처리해달라
가 된다.
즉, 콜백 함수는 다른 코드(함수 또는 메서드)에게 인자로 넘겨줌으로써 그 제어권도 함께 위임한 함수이고,
콜백 함수를 위임받은 코드는 자체적으로 내부 로직에 의해 이 콜백 함수를 적절한 시점에 실행한다. (적절한 시점 또한 제어권이 있는 함수에서 알아서 정한다.)
코드를 봐보자.
let count = 0; const cbFunc = function () { console.log(count); if (++count > 4) clearInterval(timer); }; let timer = setInterval(cbFunc, 300);
위 예제 코드에서 단순히 cbFunc함수를 실행시켜준다면 호출주체와 제어권은 모두 사용자에게 있을 것이다.
그러나 setInterval에게 넘겨준다면 호출주체와 제어권은 모두 setInterval이 된다.
다른 예시로 map을 보면,
map에서 받는 인자 중 currentValue, index가 있다.
이 둘을 바꿔서 index, currentValue로 넣어준다면 결과가 같을까?
정답은 당연히 다르다.
컴퓨터는 사람처럼 index, currentValue의 의미를 알지 못한다.
결국 인자의 순서를 맞춰주어야 한다는 것.
즉, 인자의 순서 까지도 제어권이 map에 있다는 것이다.
콜백함수를 너무 간단하게 넘어간 것 같다.
제어권하며 this 바인딩에 콜백지옥까지 내용이 더 있지만
다음에 하기로 하자..! (몸상태가 좋지 않다 ㅠ)