값으로서의 함수와 콜백 - 함수지향 | 생활코딩
[출처 : https://opentutorials.org]
값으로서의 함수
JavaScript에서는 함수도 객체다. JavaScript의 함수가 다른 언어의 함수와 다른 점은 함수가 값이 될 수 있다는 점이다.
함수는 변수의 값이 될 수 있다.
function a(){} // var a = function(){}; 과 동일
함수는 객체의 값으로 포함될 수 있다
a = {
b : function() {} // 'b'는 속성(property), 'function(){}'은 메소드(method)
}
함수는 값이기 때문에 다른 함수의 인자로 전달 될 수도 있다.
function cal (func, num) { return func(num) }
function increase(num) { return num+1 }
cal(increase, 1);
함수는 함수의 리턴 값으로 사용할 수 있다.
function cal(mode) {
var func = {
'plus' : function(left, right){ return left + right }
}
return func[mode];
}
calc('plus')(2,1) // calc('plus') == function(left, right) { ... }
함수는 배열의 값으로 사용할 수 있다.
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) // 121
※ 1급 객체 (first class object)
- 변수(variable)에 담을 수 있다
- 인자(parameter)로 전달할 수 있다
- 반환값(return value)으로 전달할 수 있다
※ 1급 함수 (first class function)
- 런타임(runtime) 생성이 가능하다
- 익명(anonymous)으로 생성이 가능하다
# 자바스크립의 함수는 1급 객체인 동시에 1급 함수다.
콜백
- 객체의 상태 변화(이벤트)가 발생한 후 수행될 함수를 의미. 즉, 인자 전달 시 함수를 전달
- 콜백함수는 전달 받은 즉시 바로 실행이 될 필요가 없다. 함수의 이름처럼 “called back” , 함수의 내부의 어느 특정시점에 실행한다.
# 처리의 위임
- 함수의 인자로 함수를 전달할 수 있다. 값으로 전달된 함수는 호출될 수 있기 때문에, 전달 받은 함수의 동작을 바꿀 수 있다.
# 비동기 처리
- 시간이 오래걸리는 작업이 있을 때 이 작업이 완료된 후에 처리해야 할 일을 콜백으로 지정하면 해당 작업이 끝났을 때 미리 등록한 작업을 실행하도록 할 수 있다.