값으로서의 함수
JavaScript에서는 함수도 객체다. 다시 말해서 일종의 값이다. 거의 모든 언어가 함수를 가지고 있다.
JavaScript의 함수가 다른 언어의 함수와 다른 점은 함수가 값이 될 수 있다는 점이다.
a 변수 안에 있는 b 속성의 값을 메소드라고 한다.
함수는 값이기 때문에 다른 함수의 인자로 전달 될수도 있다. 아래 예제를 보자.
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(left, right) { return left + right},
'minus' : function(left, right) { return left + right}
}
return funcs[mode];
}
alert( cal('plus')(2,3) );
alert( cal('minus')(2,3) );
당연히 배열의 값으로도 사용할 수 있다.
var process = [
function(input) { return input + 10; },
function(input) { return input * input; },
function(input) { return input / 2 ; }
};
var input = 1;
for(var i =0; i < process.length; i++){
input = process[i].(input);
}
alert(input);
콜백
처리의 위임
var numbers = [ 20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
var sortfunc = function(a, b){
console.log(a, b);
if( a > b){ return 1;
}else if ( a < b ){ return -1;
}else { return 0; }
}
console.log(numbers.sort(sortfunc));
이것을 간단하게 바꾸면
var numbers = [20, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
var sortfunc = function(a, b){
return a - b;
}
가 된다. 왜냐하면 큰 값에서 작은 값을 빼면 양수일꺼고 작은 값에서 큰 값을 뺴면 음수일 것이기 때문이다.
만약 문자라고 하면, 사용자가 원하는 기준을 만들고 그에 따라 정렬하면 된다.
값으로써 함수를 전달할 수 있기 때문에 원래 함수의 동작을 제어할 수 있다.
이것을 콜백이라고 한다.( 값으로 함수를 전달할 수 있다는게 중요)
비동기 처리(Ajax)
datasource.json.js
{"title":"JavaScript", "author":"jiyong"}
ajaxTest.js
<script>
$.get('./datasource.json.js', function(result){
console.log(result);
}, 'json');
</script>
위임을 하는 기법은 콜백을 통해 이루어진다.
출처 : https://opentutorials.org/course/743/6508