javascript/javascript 심화지식

값으로서의 함수와 콜백

honey.kikiki 2021. 7. 17. 11:48
728x90

값으로서의 함수와 콜백

function a(){} === let a =function (){} === let a = () => {}

위의 예제에서 함수 a는 변수 a에 담겨진 값이다. 또한 함수는 객체의 값으로 포함될 수 있다. 이렇게 객체의 속성 값으로 담겨진 함수를 메소드(method)라고 부른다.

a = {
  b: function () {},
};

 함수는 값이기 때문에 다른 함수의 인자로 전달 될수도 있다. 아래 예제를 보자.

function cal(func, num) {
  return func(num);
}

function increase(num) {
  return num + 1;
}

function decrease(num) {
  return num - 1;
}

alert(cal(increase, 1)); // 2

alert(cal(decrease, 1)); // 0

 

alert(cal(increase, 1));을 실행하면 함수 increase와 값 1이 함수 cal의 인자로 전달된다. 함수 cal은 첫번째 인자로 전달된 increase를 실행하는데 이 때 두번째 인자의 값이 1을 인자로 전달한다. 함수 increase은 계산된 결과를 리턴하고 cal은 다시 그 값을 리턴한다

 

함수는 함수의 리턴 값으로도 사용할 수 있다.

function cal(mode) {
  let funcs = {
    plus: function (left, right) {
      return left + right;
    },

    minus: function (left, right) {
      return left - right;
    },
  };

  return funcs[mode];
}

alert(cal("plus")(2, 1)); //3

alert(cal("minus")(2, 1)); //1

 

당연히 배열의 값으로도 사용할 수 있다.

let process = [
  function (input) {
    return input + 10;
  },

  function (input) {
    return input * input;
  },

  function (input) {
    return input / 2;
  },
];

let input = 1;

for (let i = 0; i < process.length; i++) {
  // 0,1,2

  input = process[i](input); //11, 121, 60.5
}

alert(input); //60.5

 

콜백

처리의 위임

값으로 사용될 수 있는 특성을 이용하면 함수의 인자로 함수로 전달할 수 있다. 값으로 전달된 함수는 호출될 수 있기 때문에 이를 이용하면 함수의 동작을 완전히 바꿀 수 있다. 인자로 전달된 함수 sortNumber의 구현에 따라서 sort의 동작방법이 완전히 바뀌게 된다.

let number = [20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];

// 숫자 정렬하기 메서드 ,sort

let sortfunc = function (a, b) {

return a - b;

// 밑에 코드를 위에코드로 줄일수있다.

// if (a > b) {

// return 1;

// } else if (a < b) {

// return -1;

// } else {

// return 0;

// }

};

number.sort(sortfunc); // sortfunc 콜백함수

console.log(number); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20]