이게 뭐냐?

다른 함수가 실행을 끝낸 뒤 실행되는, callback ( 부르고, 끝난 뒤에 부르는 ) 함수를 말한다.

또한, 함수를 만들때 파라미터를 받아서 쓸수있는데

간단히는 매개변수로 함수 객체를 전달하여 호출 함수 내에서 매개변수 함수를 실행하는 것.

( 함수엔 일반적으로 변수나 값을 전달하기 때문에, 함수내에 또다른 함수를 전달하는건 이례적이다 )

콜백함수에 관한 변수의 유효범위 (scope), 동기 / 비동기 처리에 대한 이야기

  1. 동기 : 하나의 요청이 오면 완료가 된 후 다음 요청을 실행하는 방식 ( 순차적 로직 )
  2. 비동기 : 어떤 요청이 오면 완료가 되기 전에 다음 요청을 실행하는 방식 ( 동시 효율적 처리 기능, 즉시 응답X 때문에 예상 밖 결과가 나올 수 있음 )

비동기 방식으로 작성된 함수를 동기 처리하기 위해 필요 하다.


사용 원칙

  1. 익명의 함수를 사용한다 이유는, 보통 콜백 함수는 호출 함수에 일회용으로 사용하는 경우가 많기 때문에 코드의 간결성을 위해서 이름이 없는 익명의 함수를 쓴다는거다.

    sayHello("가현", function (name) { // 함수의 이름이 없는 익명 함수
    	console.log(name);
    });
    

    익명 함수는 함수의 내부에서 매개변수를 통해 실행되기에, 이름을 붙이지 않아도 된다.

  2. 화살표 함수 모양의 콜백 - 화살표 함수가 뭐더라? 콜백에서 간결성을 얻지만, 한단계 더 나아가면 화살표 함수 형태로 정의해 사용가능하다.

    function sayHello(callback) {
      var name = "Alice";
      callback(name); // 콜백 함수 호출
    }
    
    // 익명 화살표 콜백 함수
    sayHello((name) => {
      console.log("Hello, " + name);
    }); // Hello, Alice
    
  3. 함수의 이름을 넘기기 JS는 일급 객체의 특성을 가지고 있기 때문에, JS는 null과 undefined 타입을 제외하고 모든 것을 객체로 다룬다.

그래서 매개변수에 일반적인 변수나 상수값 뿐만 아니라 함수 자체를 객체로서 전달이 가능한 것.

만일 콜백 함수가 일회용이 아닌 여러 함수에 재활용으로 이용될 경우, 별도로 함수를 정의하고 함수의 이름만 호출 함수의 인자에 전달하는 식으로 사용이 가능하다.

```jsx
// 콜백 함수를 별도의 함수로 정의
function greet(name) {
  console.log("Hello, " + name);
}

function sayHello(callback) {
  var name = "Alice";
  callback(name); // 콜백 함수 호출
}

function sayHello2(callback) {
  var name = "Inpa";
  callback(name); // 콜백 함수 호출
}

// 콜백 함수의 이름만 인자로 전달
sayHello(greet); // Hello, Alice
sayHello2(greet); // Hello, Inpa
```