[TIL] 값으로서 콜백(Callback)과 함수

Captainjack·2021년 4월 27일
0

TIL

목록 보기
24/258

JS에서는 함수도 객체이며 값이다.
다른 언어와 다르게 js에서는 함수가 값이 될 수 있다는 점이다.

정규 표현식이 이것을 쉽게 표현 해준다.

let a = "value" // 값이 있기에 a에 할당가능하다.
function a(){}  
let a = function(){} //아래 위가 똑같음, function a(){}이 값이기 때문에 a에 저장한다.

위의 식을보고 이해했다면

a = {
    b:function(){
    }
}; // key = b, value = function(){} 

즉, 키는 변수와 같은 역할을 한다.

객체에서 변수의 역할을 하는 것을 속성(Property)라고 부른다.

그리고 이렇게 객체의 속성 값으로 담겨진 함수를 메소드(method)라고 부른다.

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

function cal(mode){
    var funcs = {
        'plus' : function(left, right){return left + right},
        'minus' : function(left, right){return left - right}
    }//메서드가 'plus','minus'가있다.
    return funcs[mode];  //funcs['plus'
}
alert(cal('plus')(2,1));
// 
alert(cal('minus')(2,1));   

cal('plus')가 return문에 의해서 funcs의 메서드 'plus'가 mode로 들어가면서 'plus'함수 function(left, right){return left + right}를 실행하게 된다.
이어서 나오는 ()의 의미는 함수를 호출하는 것이기때문에 이어서
함수의 인자 값으로 (2,1)을 넣기 때문에 최종적으로는
3이라는 값을 출력하게 된다.

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

배열도 같은 방식으로 실행된다.


first-class citizen(Object, value, entity)
함수는 변수, 매개변수, 리턴 값으로 사용할 수 있기 때문에 fcc라고 볼 수 있다.


Callback

= 어떠한 함수가 수신하는 인자가 함수인 경우를 callback라고 부른다.

function sortNumber(a,b){
    return b-a; //콜백 함수
}
var numbers = [20, 10, 9,8,7,6,5,4,3,2,1];
alert(numbers.sort(sortNumber)); // array, [20,10,9,8,7,6,5,4,3,2,1]

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


Reference

https://opentutorials.org/module/532/6508

profile
til' CTF WIN

0개의 댓글