자바스크립트 함수와 콜백함수

2018-03-19

값으로서의 함수

자바스크립트에서는 함수도 객체다. 다시 말해서 일종의 값이다. 거의 모든언어가 함수를 가지고있지만 자바스크립트의 함수가 다른 언어의 함수와 다른 점을 함수가 값이 될 수 있다는 점이다.

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));
alert(cal(decrease, 1));

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

function cal(mode){
  var funcs = {
    'plus': function(){},
    'minus': function(){}
  }
  return funcs[mode]
}
alert(cal('plus')(2,1));
alert(cal('minus')(2,1))

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

var process = [
  function(input){return input+10},
  function(input) {return input*input}
];
var input =1;
for (var i = 0; i < process.length; i++) {
  input = process[i](input);
}
alert(input);

First-Class-Citizen(Object) 의 조건

  • 변수
  • 매개변수
  • 리턴값

콜백함수!!

Something will call this function back sometime somehow.

setInterval(function (){
  console.log('1초마다 실행')''
}, 1000)
// 첫번째 인자: 콜백함수
// 두번째 인자: 주기

콜백함수의 특징

  • 다른함수 A의 매개변수로 콜백함수 B 를 전달하면, A가 B의 제어권을 갖게된다.
  • 특별한 요청(bind)이 없는 한, A에 미리 정해진 방식에 따라 B를 호출한다.
  • 미리 정해진 방식이란 this에 무엇을 바인딩할지, 매개변수에는 어떤 값들을 지정할지 어떤 타이밍에 콜백을 호출할지 등이다.

주의

  • 콜백은 ‘함수’다!.