> For the complete documentation index, see [llms.txt](https://shhn0509.gitbook.io/javascript/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shhn0509.gitbook.io/javascript/js-upgrade/undefined-1.md).

# 함수의 용도

&#x20;함수의 용도&#x20;

## 1.함수는 값 &#x20;

값은 변수에 할당할 수 있다. 값이기 때문이다.&#x20;

```javascript
var a = "value"
```

&#x20;**변수에 할당 가능**&#x20;

JS에서 함수는 변수에 할당 할 수 있다. 즉, 함수는 객체이며 이는 일종의 값이다. 아래 예제를 보면 함수는 변수 a에 할당된 값이다.&#x20;

```javascript
var a = function() {} 
function a(){}
```

&#x20;메소드&#x20;

함수를 객체에 저장할 수 있다. 객체에 저장된 함수를 메소드(method)라고 한다. 예제에서 b 함수를 실행하려면 a.b()로 실행 할 수 있다.&#x20;

```javascript
var a = { b: function() {} }
```

함수의 인자로 전달 가능&#x20;

함수는 값이기 때문에 함수의 인자로 전달 할 수 있다.&#x20;

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

> 정리&#x20;
>
> * 함수는 값 → 변수에 할당 가능&#x20;
> * 객체에 저장 가능 → 메소드&#x20;
> * 함수의 인자로 전달가능 → 값이기 때문에 가능&#x20;

## 2. 리턴, 배열의 값&#x20;

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

```javascript
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,1));
alert(cal('minus')(2,1));   
```

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

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