: 다른 코드의 인자로 넘겨주는 함수로써 콜백함수의 코드를 받은 함수는 적절한 시점에 필요에 따라 콜백함수를 실행 (간단하게 콜백 함수는 알람같은 함수다!)
: 콜백함수는 다른 함수나 메서드로 인자를 넘겨줌으로 제어권까지 위임
: 콜백함수는 콜백함수만을 바꿔줌으로써 하나의 함수를 여러가지로 응용할 수 있어 유용 (다른 동작을 하는 함수를 정의해 둔 후, 인풋함수를 지정해 각 동작을 실행하는 함수를 불러오면 같은 인풋으로 다른 동작을 수행할 수 있다.)
제어권을 넘겨 받으면?
▶︎ 콜백함수의 호출시점을 스스로 판단해서 실행
▶︎ 콜백 함수를 호출할때 인자로 넘겨준 값과 순서 지정
▶︎ this가 무엇을 가리킬지 지정 (만약 바꾸고 싶다면 bind사용, 지정이 없을 경우 전역객체로 사용)
※ 주의점 : 코드를 읽는데는 편하게 해주나, 너무 많은 콜백이 생기면 디버깅이 힘들어지므로 적당한 사용 필요
1.익명의 함수 사용 : 콜백함수는 이름이 없는 익명의 함수를 사용한다. (함수 내부에서 실행되기 때문에)
2.함수의 이름만 넘기기 : 함수를 콜백함수로 사용할 경우 함수의 이름만 넘겨주면 된다.
아래 예제내에서 callback(), finishFunc()처럼 ()를 붙일 필요가 없다는 이야기!
function whatYourName(name, callback) {
console.log('name: ', name);
callback();
}
function finishFunc() {
console.log('finish function');
}
whatYourName('miniddo', finishFunc);
/*
name: miniddo
finish function
*/
3.전역변수, 지역변수를 콜백함수의 파라미터로 전달
비동기 호출이 자주 일어나는 프로그램의 경우 콜백 지옥이 발생한다.
콜백 지옥이란 함수의 매개변수로 넘겨지는 콜백 함수가 반복되어 코드의 들여쓰기 수준이 감당하기 힘들어질 정도로 깊어지는 현상
function add(x, callback) {
let sum = x + x;
console.log(sum);
callback(sum);
}
add(2, function(result) {
add(result, function(result) {
add(result, function(result) {
console.log('finish!!');
})
})
})
위 코드 처럼 indent depth가 계속 증가하는 지옥에 빠질 수 있음
01.24 할 일
async / await 개념 재정리
비동기제어 한번 더 공부