Callback function - MDN Web Docs Glossary: Definitions of Web-related terms | MDN
element.onclick = myFunc; 이런식으로 이벤트 프로퍼티에 할당하는 함수도 콜백 함수이다. 즉 중요한 것은 다른 함수/주체에 의해 실행되는 함수가 바로 콜백이라는 것이다.function loadScript(src) {
// <script> 태그를 만들고 페이지에 태그를 추가합니다.
// 태그가 페이지에 추가되면 src에 있는 스크립트를 로딩하고 실행합니다.
let script = document.createElement('script');
script.src = src;
document.head.append(script);
}
loadScript 함수가 있다고 해보자.loadScript('/my/script.js'); // script.js엔 "function newFunction() {…}"이 있습니다.
newFunction(); // 함수가 존재하지 않는다는 에러가 발생합니다!
‘/my/script.js’ 파일에는 newFunction 함수가 정의되어 있다고 가정하자. 위 코드는 이 newFunction 함수를 loadScript 함수를 통해 로딩하여 실행시키고자 한다.newFunction(); 부분은 스크립트 로딩이 완료되기 전에 실행되고, 이는 아직 정의되지 않은 함수이기 때문에, 오류가 발생하게 된다.우리는 “스크립트 로딩이 완료 되면” newFunction 함수 호출을 하도록 코드를 작성하고 싶다.
이런 경우 콜백 함수를 이용해 비동기적으로 동작을 처리할 수 있다.
element.onclick = myFunc; 이런 식으로 다른 객체의 프로퍼티/메소드에 함수를 저장하는 경우도 콜백함수라고 한다. 즉 “다른 함수에 의해 실행되는 함수”가 핵심 개념이라고 볼 수 있다)
loadScript에 콜백을 전달하여 콜백이 비동기적으로 호출되도록 해볼 것이다.function loadScript(src, **callback**) {
let script = document.createElement('script');
script.src = src;
**script.onload = () => callback();**
document.head.append(script);
}
script.onload메소드에 ‘콜백 함수를 실행하는 익명함수’를 할당함으로써 “스크립트 로딩이 완료되면 콜백 함수를 실행하도록” 코드를 작성하였다.loadScript('/my/script.js', function() {
// 콜백 함수는 스크립트 로드가 끝나면 실행됩니다.
newFunction(); // 이제 함수 호출이 제대로 동작합니다.
...
});
loadScript 함수를 호출하면 된다. 두번째 매개변수인 콜백함수 자리에 newFunction을 호출하고 있는 익명 함수를 넘겨주는 모습이다.function loadScript(src, callback) {
let script = document.createElement('script');
script.src = src;
script.onload = () => callback(**script**); // 이번에는 인자를 받는 모습
document.head.append(script);
}
loadScript('<https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js>',
**script** => {
alert(`${script.src}가 로드되었습니다.`);
alert( _ ); // 스크립트에 정의된 함수
});
_라는 함수를 사용하고 있는데, 해당 함수가 lodash 스크립트 내부에 정의가 되어 있는 함수이기 때문에, 로딩이 완료되고 나서 해당 함수를 정상적으로 호출할 수 있는 것이다.