본문 바로가기
괴발개발/js

함수

by 맛길만걷자 2024. 6. 21.
728x90
반응형
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>14_함수</title>
    <style>
        /*code태그*/
    code{
        color:red;
        font-size: 20px;
        font-weight: bold;
    }

    #btn1{
        width:50px;
        height: 50px;
        border:1px solid black;
        font-size:30px;
        font-weight: bold;
        cursor: pointer;
        display:flex;
        justify-content: center;
        align-items: center;
    }
    </style>
</head>
<body>
    <h3>기본적인 함수의 선언, 정의, 호출</h3>
   
    <pre>
        <code>
            function 함수명(매개변수){//함수 선언

                //함수 정의

            }

            함수명(); //함수 호출
        </code>
    </pre>

    <!-- 매개변수 this : 클릭된 요소를 의미 -->
    <div id="btn1" onclick="clickCount(this)">0</div>
   
    <hr>

    <h3>익명 함수(이름이 없는 함수)</h3>
    <pre>
        <code>
            function(매개변수){//함수 선언
                //함수 정의
            }

        </code>
        - 이름이 없는 함수이기 때문에 필요할 때 마음대로 호출하는 것이 불가능

        - 이벤트 핸들러와 같이 바로 동작하는 함수가 필요한 경우 또는
          변수, 매개변수에 함수를 저장해야하는 경우 사용함.

    </pre>

    <hr>

    <h3>즉시 실행 함수</h3>
    <pre>
        <code>
            (function(매개변수){//함수 선언
                //함수 정의
            })();

            - 익명 함수의 한 종류로써
              함수가 정의 되자마자 바로 실행되는 함수

            ***즉시 실행 함수 사용 이유
            1) 함수 선언, 정의, 호출의 일련 과정을 수행하지 않아도 바로 실행된다.
               -> 호출부가 없으므로 일반적인 함수보다 속도적 우위를 가지고 있음

            2) 사용하려는 변수명이 전역변수로 사용되어지고 있는 경우
               즉시 실행 함수를 이용하여 내부의 지역 변수로 작성하면
               변수명 충돌 문제를 해결할 수 있다.
        </code>
    </pre>

    <hr>
    <h3>화살표 함수</h3>
    <pre>
        익명 함수의 표현식을 간단히 표현한 표기법

        작성법 1. 기본 형태 ([매개변수]) => { 함수 정의 }

            익명 함수 : function(){}
            화살표 함수 : () => {}

            익명 함수 : function(num){ return num * 2; }
            화살표 함수 : (num) => {return num * 2; }

        작성법 2. 매개변수가 "하나"인 경우 () 생략 가능

            익명 함수 : function(e){ e.target.style.backgroundColor = "yellow"; }
            화살표 함수 : e => { e.target.style.backgroundColor = "yellow"; }

        작성법 3. 매개변수가 없을 경우 "무조건" () 작성

        작성법 4. 함수의 정의 부분이 return [식 또는 값] 으로만 작성되어 있는 경우
                  {}, return 생략 가능

        작성법 5. 함수 정의 부분이 return 구문만 있으나
                  return되는 값이 객체(Object)인 경우 {}, return 생략 불가능
    </pre>

    <button id="btn2-1">기본 형태</button>

    <button id="btn2-2">매개변수 1개</button>

    <button id="btn2-3">{}, return 생략</button>

    <button id="btn2-4">this 사용 불가</button>
   
    <script src="js/14_함수.js"></script>
</body>
</html>
//기본 함수
function clickCount(btn){
   btn.innerText = Number(btn.innerText) + 1;
}

//-------------------------------

//즉시 실행 함수 확인하기

function test1(){ //기본 함수 선언/정의
    console.log("기본함수");

}

test1();//호출

// 즉시 실행 함수
(function(){
    console.log("즉시실행 함수");
    //호출하지 않아도 자동으로 수행
})();

// * 즉시 실행 함수의 변수명 중복 해결
const str = "전역 변수";

(function(){ const str = "즉시 실행 함수의 지역 변수";
    console.log(str);

})();

console.log(str);

// ----------------------------------------------

// 화살표 함수(Arrow Function)

// 1. 기본 형태 : ([매개변수]) => {}
document.getElementById("btn2-1").addEventListener("click",()=>{
    alert("화살표 함수 기본 형태");
})

// 2. 매개변수 1개 : 매개변수 => {}
document.getElementById("btn2-2").addEventListener("click", e=> {
    e.target.style.backgroundColor = "green";
})

// 3. {}, return 생략
document.getElementById("btn2-3").addEventListener("click", ()=>{
   
    //함수 호출(익명 함수)
    printConsole(function(num){return num *10});

    //함수호출 (화살표 함수)
    printConsole((num)=> num *10);

    //반환값이 Object이면 {}, return 생략 불가
    // -> 함수표(=>) 다음에 함수 정의 부분이 있어야 하는데
    //    객체(Object)가 작성되어 있어 문법 오류 발생

    printConsole(num => {return {price : num*100, n : num}});
    //printConsole(num => {price : num*100, n : num}); // 문법오류
})




function printConsole(fn){ //매개변수로 함수가 전달
    console.log(fn(2));
}

// this(이벤트가 발생한 요소) 사용 불가

// 1) 익명 함수는 this 사용 가능
// document.getElementById("btn2-4").addEventListener("click",function(){
//     this.style.backgroundColor = "pink";
// })

// 2) 화살표 함수는 this 사용 불가
document.getElementById("btn2-4").addEventListener("click",e=>{

    // 화살표 함수에서 this는 창 자체를 나타내는 객체(window)이다.
    console.log(this);

    //this.style.backgroundColor = "pink";
    e.target.style.color="red";
})
728x90
반응형

'괴발개발 > js' 카테고리의 다른 글

요소 추가 제거  (0) 2024.06.20
DOM  (2) 2024.06.20
객체  (0) 2024.06.19
window 내장객체  (0) 2024.06.19
배열  (0) 2024.06.18