[JavaScript] 값으로서의 함수

2020. 7. 7. 11:37 Javascript/JavaScript

값으로서의 함수와 콜백


JavaScript에서는 함수도 객체다. 

다시 말해서 일종의 값이다. 

거의 모든 언어가 함수를 가지고 있다. JavaScript의 함수가 다른 언어의 함수와 다른 점은 함수가 값이 될 수 있다는 점이다.

함수역시 변수에 담을수 있다.(var a = function(){})

function a(){} // var a = function( ){ }(함수가 값이므로 가능하다.)

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


a = {

    b:function(){

    }

};//객체는 {에서 }로 끝난다.

함수는 값이고 그렇기 때문에 객체안에 저장될 수 있다 .

객체 안에서 b라는 것은 어떤 값을 저장하고 있는 그릇역할(key-value) b는 그릇안에서 변수와 같은 역할을 하고 있다 (값을 저장하고 있기 때문에)

a라는 변수는 b라는 값이 있는데 그 속성의 값이 함수인데 이 함수를 메소드라고 한다.(객체 안에 저장되어 있는 함수를 메소드라고 부른다.)


cf.) 객체 안에서 변수 역할 하는 것을 프로퍼티(속성)라 한다. 그리고 그 속성에 저장되어 있는 값이 함수라면 메소드라 부른다. 

객체 >변수(프로퍼티) > 함수(메소드)


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

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));

10행을 실행하면 함수 increase와 값 1이 함수 cal의 인자로 전달된다. 함수 cal은 첫번째 인자로 전달된 increase를 실행하는데 이 때 두번째 인자의 값이 1을 인자로 전달한다. 

함수 increase은 계산된 결과를 리턴하고 cal은 다시 그 값을 리턴한다.


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

function cal(mode){

    var funcs = {

        'plus' : function(left, right){return left + right},

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

    }

    return funcs[mode];//cal('plus')(2,1));로 호출하명 mode는 plus가 된다.

}

alert(cal('plus')(2,1));

alert(cal('minus')(2,1));   


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

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);



출처: https://devbox.tistory.com/entry/JavaScript-값으로서의-함수?category=574556 [장인개발자를 꿈꾸는 :: 기록하는 공간]

'Javascript > JavaScript' 카테고리의 다른 글

[JavaScript] this  (0) 2020.07.07
[JavaScript] 생성자와 new  (0) 2020.07.07
[JavaScript] 함수의 호출  (0) 2020.07.07
[JavaScript] 콜백  (0) 2020.07.07
[JavaScript] 객체  (0) 2020.07.07
[JavaScript] 배열  (0) 2020.07.07
[JavaScript] 함수 정의하는 방법  (0) 2020.07.07
[JavaScript] 비교 ('=='와 '==='의 차이)  (0) 2020.07.07