# 데이터 실행하기

## 함수

* 익명 함수
* 매개변수 함수
* 리턴값 함수
* 화살표 함수 : 선언적 함수
* 화살표 함수 : 익명 함수
* 화살표 함수 : 매개변수 함수
* 화살표 함수 : 리턴값 함수
* 내부 함수 → 클로저
* 즉시실행 함수
* 파라미터 함수
* 아규먼트 함수(죽은문법)
* 재귀 함수 : 함수 안에서 자기 자신을 호출하는 함수
* **\*콜백 함수** : 함수를 실행시키고 난 뒤 다른 함수를 호출하는 함수

### 39. 선언적 함수

```javascript
{
    function func(){
        document.write("함수가 실행되었습니다.");
    }
    func(); //함수가 실행되었습니다.
}
```

### 40. 익명 함수

```javascript
{
    const func = function(){
        document.write("함수가 실행되었습니다.");
    }
    func(); //함수가 실행되었습니다.
}
```

### 41. 매개변수 함수

```javascript
{
    const func = function(str){
        document.write(str);
    }
    func("함수가 실행되었습니다."); //함수가 실행되었습니다.
}
```

### \*42. 리턴값 함수

```javascript
{
    function func(){
        const str = "함수가 실행되었습니다.";
        return str;
    }
    document.write(func()); //함수가 실행되었습니다.
}
```

### \*43. 화살표 함수 : 선언적 함수

```javascript
{
    func = () => {
        document.write("함수가 실행되었습니다.");
    }
    func(); //함수가 실행되었습니다.
}
```

### \*44. 화살표 함수 : 익명 함수

```javascript
{
    const func = () => {
        document.write("함수가 실행되었습니다.");
    }
    func(); //함수가 실행되었습니다.
}
```

### \*45. 화살표 함수 : 리턴값 함수

```javascript
{
    func = () => {
        const str = "함수가 실행되었습니다.";
        return str;
    }
    document.write(func()); //함수가 실행되었습니다.
    document.write('<span style = "color:red;">' +func()+ '</span>');
    //함수가 실행되었습니다. 글자색-빨강
}
```

### 46. 화살표 함수 : 익명 함수 + 매개변수 + 리턴값

```javascript
{
    const func = (str) => {
        return str;
    }
    document.write(func("함수가 실행되었습니다.")); //함수가 실행되었습니다.
}
```

### 47. 화살표 함수 : 익명 함수 + 매개변수 + 리턴값 + 괄호 생략

```javascript
{
    const func = str => {
        return str;
    }
    document.write(func("함수가 실행되었습니다.")); //함수가 실행되었습니다.
}
```

### 48. 화살표 함수 : 익명 함수 + 매개변수 + 리턴값 생략 + 괄호 생략

```javascript
{
    const func = str => str;
    document.write(func("함수가 실행되었습니다.")); //함수가 실행되었습니다.
}
```

### 49. 화살표 함수 : 선언적 함수 + 매개변수 + 리턴값 생략 + 괄호 생략 {

```javascript
{
    func = str => str;
    document.write(func("함수가 실행되었습니다.")); //함수가 실행되었습니다.
}
```

* 함수 유형 : 함수와 매개변수를 이용한 형태
* 함수 유형 : 함수와 변수를 이용한 형태
* 함수 유형 : 함수와 배열를 이용한 형태
* 함수 유형 : 함수와 객체를 이용한 형태
* 함수 유형 : 함수와 객체(함수)를 이용한 형태
* 함수 유형 : 객체 생성자 함수()
* 함수 유형 : 프로토타입 함수
* 함수 유형 : 객체 리터럴 함수
* 함수 유형 : 클래스()

### 50. 함수 유형 : 함수와 매개변수를 이용한 형태

```javascript
{
    function func(num, name, job){
        document.write(num + ". 내 이름은 " + name + "이며, 직업은 " + job + "입니다.");
    }
    func("1", "웹쓰", "웹퍼블리셔"); //1. 내 이름은 웹쓰이며, 직업은 웹퍼블리셔입니다.
    func("2", "조서은", "프론트앤드개발자"); //2. 내 이름은 조서은이며, 프론트앤드개발자입니다.
}
```

### 51. 함수 유형 : 함수와 변수를 이용한 형태

```javascript
{
    function func(num, name, job){
        document.write(num + ". 내 이름은 " + name + "이며, 직업은 " + job + "입니다.");
    }
    const youNum1 = "1";
        const youName1 = "웹쓰";
        const youJob1 = "웹퍼블리셔";
        const youNum2 = "2";
        const youName2 = "조서은";
        const youJob2 = "프로트앤드개발자";

        func(youNum1, youName1, youJob1); //1. 내 이름은 웹쓰이며, 웹퍼블리셔입니다.
        func(youNum2, youName2, youJob2); //2. 내 이름은 조서은이며, 프론트앤드개발자입니다.
}
```

### 52. 함수 유형 : 함수와 배열을 이용한 형태

```javascript
{
    function func(num, name, job){
        document.write(num + ". 내 이름은 " + name + "이며, 직업은 " + job + "입니다.<br>");
    }
    const info = [
        {
            num: 1,
            name: "웹쓰",
            job: "웹퍼블리셔"
        },{
            num: 2,
            name: "조서은",
            job: "프론트앤드개발자"
        }
    ]

    func(info[0].num, info[0].name, info[0].job); //1. 내 이름은 웹쓰이며, 웹퍼블리셔입니다.
    func(info[1].num, info[1].name, info[1].job); //2. 내 이름은 조서은이며, 프론트앤드개발자입니다.
}
```

### 53. 함수 유형 : 함수와 객체를 이용한 형태

```javascript
{
    function func(num, name, job){
        document.write(num + ". 내 이름은 " + name + "이며, 직업은 " + job + "입니다.<br>");
    }
    const info = {
        num1: 1,
        name1: "웹쓰",
        job1: "웹퍼블리셔",
        num2: 2,
        name2: "조서은",
        job2: "프론트앤드개발자"
    }
    func(info.num1, info.name1, info.job1); //1. 내 이름은 웹쓰이며, 웹퍼블리셔입니다.
    func(info.num2, info.name2, info.job2); //2. 내 이름은 조서은이며, 프론트앤드개발자입니다.
}
```

### 54. 함수 유형 : 함수와 객체(함수)를 이용한 형태

```javascript
{
    const info = {
        num1: 1,
        name1: "웹쓰",
        job1: "웹퍼블리셔",
        num: 2,
        name: "조서은",
        job: "프론트앤드개발자",

        result1 : function(){
            document.write(this.num1 + ". 내 이름은 " + this.name1 + "이며, 직업은 " + this.job1 + "입니다.<br>");
        },
        result2 : function(){
            document.write(this.num2 + ". 내 이름은 " + this.name2 + "이며, 직업은 " + this.job2 + "입니다.<br>");
        }
    }

    info.result1(); //1. 내 이름은 웹쓰이며, 웹퍼블리셔입니다.
    info.result2(); //2. 내 이름은 조서은이며, 프론트앤드개발자입니다.
}
```

### \*55. 함수 유형 : 객체 생성자 함수

```javascript
{
    function func(num, name, job){
        this.num = num;
        this.name = name;
        this.job = job;

        this.result = function(){
            document.write(this.num + ". 내 이름은 " + this.name + "이며, 직업은 " + this.job + "입니다.<br>");
        }
    }
    const info1 = new func("1", "웹쓰", "웹퍼블리셔"); //인스턴스 생성
    //1. 내 이름은 웹쓰이며, 웹퍼블리셔입니다.
    const info2 = new func("2", "조서은", "프론트앤드개발자");
    //2. 내 이름은 조서은이며, 프론트앤드개발자입니다.
}
```

### \*56. 함수 유형 : 프로토타입 함수

```javascript
{
    function func(num, name, job){
        this.num = num;
        this.name = name;
        this.job = job;
    }
    func.prototype.result = function(){
        document.write(this.num + ". 내 이름은 " + this.name + "이며, 직업은 " + this.job + "입니다.<br>");
    }
    const info1 = new func("1", "웹쓰", "웹퍼블리셔"); //인스턴스 생성
    const info2 = new func("2", "조서은", "프론트앤드개발자");
    
    info1.result(); //1. 내 이름은 웹쓰이며, 웹퍼블리셔입니다.
    info2.result(); //2. 내 이름은 조서은이며, 프론트앤드개발자입니다.
}
```

### \*57. 함수 유형 : 객체 리터럴 함수

```javascript
{
    function func(num, name, job){
        this.num = num;
        this.name = name;
        this.job = job;
    }
    func.prototype = {
        result1: function(){
            document.write(this.num + ". 내 이름은 " + this.name + "이며, 직업은 " + this.job + "입니다.<br>");
        },
        result2: function(){
            document.write(this.num + ". 내 이름은 " + this.name + "이며, 직업은 " + this.job + "입니다.<br>");
        }
    }
    const info1 = new func("1", "웹쓰", "웹퍼블리셔"); //인스턴스 생성
    const info2 = new func("2", "조서은", "프론트앤드개발자");

    info1.result1(); //1. 내 이름은 웹쓰이며, 웹퍼블리셔입니다.
    info1.result2(); //2. 내 이름은 조서은이며, 프론트앤드개발자입니다.
}
```
