01. 선언적 함수

function func() {
    document.write("함수가 실행되었습니다.1");
}
func();         //실행문이 필요함
결과보기

02. 익명 함수

//데이터 타입(자료형) --> 타입스크립트
// const x = 100
// const x1 = "100"
// const x2 = []
// const x3 = {}
// const x4 = null, undefiend
// const x5 = function(){}
// const x6 = true, false
    
const func = function(){       //함수 이름이 없고 변수만 있어서 익명함수
    document.write("함수가 실행되었습니다.2");               
} 
func();     
결과보기

03. 매개변수 함수

function func(str){         //func(인자 = 매개변수)를 넣어줘서 출력
    document.write(str);
}
func("함수가 실행되었습니다.3");
 
결과보기

04. 리턴값 함수

function func(){
    const str = "함수가 실행되었습니다.4";
    return str;         //실행문은 아니지만 결과값을 저장
}
document.write(func());     //return이 있으므로 실행
결과보기

05. 화살표 함수 : 선언적 함수

func = () => {          //function을 없애주고 사용
    document.write("함수가 실행되었습니다.5");
}
func();
    
func = () => document.write("함수가 실행되었습니다.5");
func();         //중괄호 생략 가능
결과보기

06. 화살표 함수 : 익명 함수

const func = () => {
    document.write("함수가 실행되었습니다.6");
}
func();
결과보기

07. 화살표 함수 : 매개변수

func = (str) => {
    document.write(str);
}
func("함수가 실행되었습니다.7");
    
func = (str) => document.write(str);        //const가 앞에 있어도 상관없음
func("함수가 실행되었습니다.7");
    
func = str => document.write(str);      //변수가 하나일때 ()도 없앨 수 있음
func("함수가 실행되었습니다.7");
결과보기

08. 화살표 함수 : 리턴값 함수

func = () => {
    const str = "함수가 실행되었습니다.8";
    return str;
}
document.write(func());
결과보기

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

const func = (str) => {
    return str;
}
document.write(func("함수가 실행되었습니다.9"));
결과보기

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

const func = str => {
    return str;
}
document.write(func("함수가 실행되었습니다.10"));
결과보기

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

const func = str => str;
    
document.write(func("함수가 실행되었습니다.11"));
결과보기

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

func = str =>  str;
    
document.write(func("함수가 실행되었습니다.12"));
결과보기

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

function func(num, str1, str2){
    document.write(num + ". " + str1 + "가 "+ str2 +"되었습니다.");
}
func("1","함수", "실행");
func("2","자바스크립트", "실행");
func("3","제이쿼리", "실행");       //재활용 가능
결과보기
1. 함수가 실행되었습니다.2. 자바스크립트가 실행되었습니다.3. 제이쿼리가 실행되었습니다.

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

function func(num, str1, str2){
    document.write(num + ". " + str1 + "가 " + str2 + "되었습니다.");
}
const youNum1 = 1;
const youNum2 = 2;
const youNum3 = 3;
const youStr1 = "함수";
const youStr2 = "자바스크립트";
const youStr3 = "제이쿼리";
const youCom1 = "실행";
    
func(youNum1, youStr1, youCom1);
func(youNum2, youStr2, youCom1);
func(youNum3, youStr3, youCom1);
결과보기
1. 함수가 실행되었습니다.2. 자바스크립트가 실행되었습니다.3. 제이쿼리가 실행되었습니다.

15. 함수 유형 : 함수와 배열, 객체를 이용한 형태

function func(num, str1, str2){
    document.write(num + ". " + str1 + "가 " + str2 + "되었습니다.");
}
const info = [
    {
        num : "1",
        name : "함수",
        com : "실행"
    },
    {
        num : "2",
        name : "자바스크립트",
        com : "실행"
    },
    {
        num : "3",
        name : "제이쿼리",
        com : "실행"
    }
]
func(info[0].num, info[0].name, info[0].com);
func(info[1].num, info[1].name, info[1].com);
func(info[2].num, info[2].name, info[2].com);
결과보기
1. 함수가 실행되었습니다.2. 자바스크립트가 실행되었습니다.3. 제이쿼리가 실행되었습니다.

16. 함수 유형 : 객체 안에 변수와 함수를 이용한 형태

const info = {
    num1 : 1,
    name1 : "함수",
    word1 : "실행",
    num2 : 2,
    name2 : "자바스크립트",
    word2 : "실행",
    num3 : 3,
    name3 : "제이쿼리",
    word3 : "실행",
    result1 : function(){
        document.write(info.num1 + ". " + info.name1 + "가 " + info.word1 + "되었습니다.");
    },
    result2 : function(){
        document.write(info.num2 + ". " + info.name2 + "가 " + info.word2 + "되었습니다.");
    },
    result3 : function(){
        document.write(info.num3 + ". " + info.name3 + "가 " + info.word3 + "되었습니다.");
    }
}
info.result1();
info.result2();
info.result3();
결과보기
1. 함수가 실행되었습니다.2. 자바스크립트가 실행되었습니다.3. 제이쿼리가 실행되었습니다.

17. 함수 유형 : 객체 생성자 함수

function func(num, name, word){
    this.num = num;
    this.name = name;
    this.word = word;           //this를 사용하면 재활용이 가능
            
    this.result = function(){
        document.write(this.num  + ". " + this.name + "가 " + this.word + "되었습니다.");
    }
}
//인스턴스 생성(this 실행)
const info1 = new func("1", "함수", "실행");
const info2 = new func("2", "자바스크립트", "실행");
const info3 = new func("3", "제이쿼리", "실행");
    
//실행
info1.result();
info2.result();
info3.result();
결과보기
1. 함수가 실행되었습니다.2. 자바스크립트가 실행되었습니다.3. 제이쿼리가 실행되었습니다.

18. 함수 유형 : 프로트타입 함수

function func(num, name, word){
    this.num = num;
    this.name = name;
    this.word = word;           
}
//프로트타입 (메모리 절약, 원하는 실행문만 실행하기 위해서)
func.prototype.result = function(){
    document.write(this.num  + ". " + this.name + "가 " + this.word + "되었습니다.");
}
    
//인스턴스 생성(this 실행)
const info1 = new func("1", "함수", "실행");
const info2 = new func("2", "자바스크립트", "실행");
const info3 = new func("3", "제이쿼리", "실행");
    
//실행
info1.result();
info2.result();
info3.result();
결과보기
1. 함수가 실행되었습니다.2. 자바스크립트가 실행되었습니다.3. 제이쿼리가 실행되었습니다.

19. 함수 유형 : 객체 리터럴 함수

function func(num, name, word){
    this.num = num;
    this.name = name;
    this.word = word;           
}
    
func.prototype = {
    result1 : function(){
        document.write(this.num  + ". " + this.name + "가 " + this.word + "되었습니다.");
    },
    result2 : function(){
        document.write(this.num  + ". " + this.name + "가 " + this.word + "되었습니다.");
    },
    result3 : function(){
        document.write(this.num  + ". " + this.name + "가 " + this.word + "되었습니다.");
    }
}
    
//인스턴스 생성(this 실행)
const info1 = new func("1", "함수", "실행");
const info2 = new func("2", "자바스크립트", "실행");
const info3 = new func("3", "제이쿼리", "실행");
    
//실행
info1.result1();
info2.result2();
info3.result3();
결과보기
1. 함수가 실행되었습니다.2. 자바스크립트가 실행되었습니다.3. 제이쿼리가 실행되었습니다.

20. 함수 유형 : 즉시 실행 함수

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

(() => {
    document.write("함수가 실행되었습니다.");
})(); 
결과보기

21. 함수 유형 : 파라미터 함수

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

function func(str = "함수가 실행되었습니다."){
    document.write(str);
}
func();
결과보기

22. 아규먼트 함수

function func(a, b){
    document.write(arguments[0]);
    document.write(arguments[1]);
}
func("함수가 실행되었습니다.", "함수가 실행되었습니다.");
결과보기

23. 재귀 함수 : 자기 자신을 호출

function func(){
    document.write("함수가 실행되었습니다.");
    
    //func() -> 잘못하면 무한에 빠짐
}
func();

//반복적으로
function func(num){
    if( num <= 1 ){
        document.write("함수가 실행되었습니다." + num);
    } else {
        document.write("함수가 실행되었습니다." + num);
        func(num - 1);
    }
}
func(10);

//애니메이션 사용
function func(){
    document.write("함수가 실행되었습니다.");
    
    requestAnimationFrame(animation);
}
animation();
결과보기
함수가 실행되었습니다.10함수가 실행되었습니다.9함수가 실행되었습니다.8함수가 실행되었습니다.7함수가 실행되었습니다.6 함수가 실행되었습니다.5함수가 실행되었습니다.4함수가 실행되었습니다.3함수가 실행되었습니다.2함수가 실행되었습니다.1
함수가 실행되었습니다.함수가 실행되었습니다.함수가 실행되었습니다......

24. 콜백 함수 : 다른 함수에 인수로 넘겨지는 함수

function func(){
    document.write("함수가 실행되었습니다.2");
}
function callback(str){
    document.write("함수가 실행되었습니다.1");  //callback이 먼저 실행이 된 뒤에 나머지 실행
    str();
}
callback(func);
결과보기
함수가 실행되었습니다.1함수가 실행되었습니다.2

25. 콜백함수 : 반복문

//반복문
function func(index){
    document.write("함수가 실행되었습니다." + index);
}
function callback(num){
    for(let i=1; i<=10; i++){
        num(i);
    }
}
callback(func);
결과보기
함수가 실행되었습니다.1함수가 실행되었습니다.2함수가 실행되었습니다.3함수가 실행되었습니다.4함수가 실행되었습니다.5함수가 실행되었습니다. 6함수가 실행되었습니다.7함수가 실행되었습니다.8함수가 실행되었습니다.9함수가 실행되었습니다.10

26. 콜백함수 : 동기/비동기

//01. A -> B
function funcA(){
    document.write("funcA가 실행되었습니다.");
}
function funcB(){
    document.write("funcB가 실행되었습니다.");
}
funcA();
funcB();    //funcA 실행 후 -> funcB 실행

//02. B -> A
function funcA(){
    setTimeout(() => {
        console.log("funcA가 실행되었습니다.");
    },1000)  //-> setTimeout때문에 b먼저 실행
}
function funcB(){
    console.log("funcB가 실행되었습니다.");
}
funcA();
funcB();    //funcB 실행 후 -> funcA 실행

//03. A -> B
function funcA(callback){
    setTimeout(() => {
        console.log("funcA가 실행되었습니다.");
        callback();
    },1000);
}
function funcB(){
    console.log("funcB가 실행되었습니다.");
}
funcA(function(){
    funcB();
});   //funcA 실행 후 -> funcB 실행


//04. A -> B -> C -> D
function funcA(callback){
    setTimeout(() => {
        console.log("funcA가 실행되었습니다.");
        callback();
    },1000);
}
function funcB(callback){
    setTimeout(() => {
        console.log("funcB가 실행되었습니다.");
        callback();
    },1000);
}
function funcC(callback){
    setTimeout(() => {
        console.log("funcC가 실행되었습니다.");
        callback();
    },1000);
}
function funcD(){
    setTimeout(() => {
        console.log("funcD가 실행되었습니다.");
    },1000);
}
funcA(function(){
    funcB(function(){
        funcC(function(){
            funcD()
        })
    });
});  // funcA -> funcB -> funcC -> funcD
결과보기
funcA가 실행되었습니다. funcB가 실행되었습니다.
funcB가 실행되었습니다. funcA가 실행되었습니다.
funcA가 실행되었습니다. funcB가 실행되었습니다.
funcA가 실행되었습니다. funcB가 실행되었습니다.funcC가 실행되었습니다. funcD가 실행되었습니다.

27. promise함수


결과보기

28. 내부 함수 : 스코프 , 클로져

function func(){
    function funcA(){
        document.write("함수가 실행되었습니다.A");
    };
    funcA();
    function funcB(){
        document.write("함수가 실행되었습니다.B");
    };
    funcB();
}
func();
결과보기
함수가 실행되었습니다.A함수가 실행되었습니다.B

29. 클래스

class study {
    constructor(num, name, job){
        this.num = num;
        this.name = name;
        this.job = job;
    }   //생성자 함수

    result(){
        document.write(this.num + ".내 이름은 " + this.name + "이며, 직업은 " + this.job + "입니다.");
    } 
}

const info1 = new study("1", "웹쓰", "웹퍼블리셔");
const info2 = new study("2", "눈누난나", "프론트앤드 개발자");

info1.result(); //실행문
info2.result(); // -> 객체 생성자 함수랑 유사함
결과보기
1.내 이름은 웹쓰이며, 직업은 웹퍼블리셔입니다.
2.내 이름은 눈누난나이며, 직업은 프론트앤드 개발자입니다.

30. 클래스 상속

class study {
    constructor(num, name, job){
        this.num = num;
        this.name = name;
        this.job = job;
    }   //생성자 함수

    result(){
        document.write(this.num + ".내 이름은 " + this.name + "이며, 직업은 " + this.job + "입니다.");
    } 
}
class study2 extends study {
    constructor(num, name, job, age){
        super(num, name, job); //->위의 클래스에서 상속
        this.age = age;
    }
    result2(){
        document.write(this.num + ".내 이름은 " + this.name + "이며, 직업은 " + this.job + "이며 나이는" + this.age + "살 입니다.");
    }
}

const info1 = new study("1", "웹쓰", "웹퍼블리셔");
const info2 = new study2("2", "눈누난나", "프론트앤드 개발자", 24);

info1.result(); 
info2.result(); 
info2.result2(); 
결과보기
1.내 이름은 웹쓰이며, 직업은 웹퍼블리셔입니다.
2.내 이름은 눈누난나이며, 직업은 프론트앤드 개발자입니다.
2.내 이름은 눈누난나이며, 직업은 프론트앤드 개발자이며 나이는24살 입니다.