[JavaScript] 07_함수(function)

2022. 9. 26. 11:18·📗 self-study/📗 KH정보교육원 당산지원

 

더보기

JavaScript의 함수에 대해 알아보자

 

 

 

 

선언적 함수

       [ 표현법 ]
        
        function 함수명(매개변수명, 매개변수명) {

                  해당 함수 호출 시 실행할 소스코드들;
                  return 결과값

         };

 

 👉🏻 반환할 결과값이 없는 경우 return 구문 생략 가능
 👉🏻 매개변수가 없는 경우 매개변수명들 생략 가능

    <button onclick="test1();">실행확인</button>

    <div id="area1" class="area"></div>

    <script>
        function test1() {
            document.getElementById("area1").innerHTML += "test1() 함수 실행됨 <br>";
            // 이렇게 한 줄로도 쓸 수 있음
        }
    </script>

 

 

 

익명 함수

 👉🏻 특정 변수나 속성에 "대입"되는 함수 제시 시 주로 사용됨
        (주로 이벤트 핸들러 작성 시 사용)

        [ 표현법 ]
        변수 = function(매개변수명, 매개변수명, ...) {
            
            소스코드;
        }

 <button id="btn2">실행확인</button>

    <div id="area2" class="area"></div>

    <script>

        var btn2 = document.getElementById("btn2"); // 버튼 요소 객체

        btn2.onclick = function() { // 이벤트속성에 대입되는 function == 이벤트 핸들러

            document.getElementById("area2").innerHTML += "이벤트 핸들러를 통해 실행됨 <br>";
            // 오로지 대입되는 타켓에만 적용됨, 두고두고 쓸 수 없음 (익명 함수의 특징)
        }

    </script>

 

 

 

함수의 매개변수

 👉🏻 정의해 둔 매개변수보다 더 많이 혹은 더 적게 전달하기가 가능함

 👉🏻 단! 초과된 전달값은 무시되고, 미달된 매개변수의 값은 undefined로 출력됨

<!-- button[onclick=]{실행확인}*8 + Enter -->
    <button onclick="test3('안녕하세요');">실행확인</button> <!-- 쌍따옴표 내에서는 홑따옴표로 내용물 표현 -->
    <button onclick="test3(10);">실행확인</button>
    <button onclick="test3([1, 2, 3]);">실행확인</button>
    <button onclick="test3(true);">실행확인</button> <br>
    <button onclick="test3(prompt('이름을 입력하시오.'));">실행확인</button>
    <!-- 콜백 함수:  명시적으로 호출하는 함수가 아니라, 개발자는 단지 함수를 동록하기만 하고, 어떤 이벤트가 발생했거나 특정 시점에 도달했을 때 시스템에서 호출하는 함수 -->

    <!--
        정의해 둔 매개변수의 개수보다 더 많이 전달하는 게 가능 (즉, 문제 없음)
        단, 초과된 전달값은 무시됨
    -->
    <button onclick="test3('안녕하세요', '반갑습니다')">실행확인</button> <!-- '안녕하세요'만 출력됨 -->
    <button onclick="test3(10, '안녕하세요', true)">실행확인</button>  <!-- '10'만 출력됨 -->

    <!--
        정의해 둔 매개변수의 개수보다 더 적게 전달하는 게 가능 (즉, 문제 없음)
        단, 미달된 매개변수의 값은 undefined로 출력됨

    -->

    <button onclick="test3();">실행확인</button> <!-- undefined -->

    <div id="area3" class="area"></div>

    <script>
        // 매개변수가 있는 함수 => 매개변수의 이름만 적는다!
        function test3(value) { // 매개변수 제시 시 자료형 지정 X, var도 제시 X

            document.getElementById("area3").innerHTML += value;
        }
    </script>

 

 

 

*매개변수 관련 arguments 배열

👉🏻 함수 호출 시 전달되는 값은 내부적으로 arguments 라는 배열에 담김
👉🏻 arguments : 모든 함수마다 내부적으로 하나씩 존재하는 배열 객체
       (자바의 main 메소드의 정의부에 존재하는 String[] args와 같은 역할)

 <button onclick="test4(11, 12, 1, 5, 7);">실행확인</button>

    <div id="area4" class="area"></div>

    <script>
        function test4() {
            // console.log(arguments);
            // console.log(arguments[0]);

            // arguments 배열의 모든 값을 더해서 div에 출력
            var sum = 0;

            for(var i = 0; i < arguments.length; i++) {
                sum += arguments[i];
            }

            document.getElementById("area4").innerHTML = "총합: " + sum + "<br>";
            document.getElementById("area4").innerHTML += "평균: " + (sum / arguments.length) + "<br>";

        }
    </script>

 

 

 

*매개변수 있는 함수에 this 관련 전달하기

 👉🏻 this는 이벤트를 당하는 요소를 나타냄
        예) 버튼 요소에 클릭 이벤트를 걸었다면? => 클릭을 당하는 버튼 this가 됨
            브라우저 창에 모든 요소들이 한번 로딩되었다면? => 로딩을 당하는 브라우저창이 this가 됨

    <button onclick="test5(this);">버튼 1</button> <!-- 해당 버튼 요소 자체가 넘겨짐 -->
    <button onclick="test5(this.innerHTML);">버튼 2</button>
    <!-- this.innerHTML을 넘길 경우 시작태그와 종료태그 사이의 값이 전달됨 -->
    <input type="button" value="버튼 3" onclick="test5(this.value);">
    <button id="btn" onclick="test5(this.id);">버튼4</button> <!-- btn -->

    <script>
        function test5(a) {
            console.log(a);

        }
    </script>

 

 

 

함수의 리턴

*일반적인 값 리턴

<button onclick="test6();">실행확인</button>

    <div id="area6" class="area"></div>

    <script>
        function test6() {

            document.getElementById("area6").innerHTML += "랜덤값: " + ran() + "<br>";

        }

        // 1 ~ 100 사이의 랜덤값을 구해서 반환해 주는 함수 만들기
        function ran() {
            // 자바스크립트에서의 Math.radom(): 0.0 ~ 0.999... ~
            // var random = parseInt(Math.random() * 100) + 1;
            // *100으로 0.0 ~ 99.999로 범위가 변경, 소수점을 버림으로써 0~99, +1 해 줌으로써 범위는 1~100가 됨
            // return random;

            // 한 줄로 줄이면 이렇게!
            return parseInt(Math.random() * 100) + 1;
        }
    </script>

 

 

 

*익명 함수를 리턴하는 함수

 👉🏻 익명함수를 리턴하는 함수를 불러오고 싶다면 소괄호 2개!! 

 

👉🏻 <button onclick="test7();"> 실행확인</button>

        처럼 소괄호 1개로 진행 시 alert창이 뜨지 않음!

 

진행 과정

 

 이름: <input type="text" id="userName">
    <button onclick="test7()();">실행확인</button>

    <script>
        function test7() {

            // 사용자가 입력한 본인 이름값을 변수에 담음
            var name = document.getElementById("userName").value;

            // console.log(name); // 홍길동

            // alert(name + "님 환영합니다 ^^");

            return function() {
                alert(name + "님 환영합니다 ^^");
            }

        }
    </script>

 

 

 

실습

 👉🏻 이전에 만들었던 간단한 사칙연산 계산기를 함수로 이용해 활용해 보자

 

    <h3>* 간단한 사칙연산 계산기 만들기</h3>

    <!-- input type="number"은 아무리 숫자값만 입력 가능하더라도 실제로 다뤄지는 값은 문자열 타입 -->
    정수1 : <input type="number" id="num1"> <br>
    정수2 : <input type="number" id="num2"> <br>

    <label id="result"></label> <br>
    <button onclick="op(1);">덧셈</button>
    <button onclick="op(2);">뺄셈</button>
    <button onclick="op(3);">곱셈</button>
    <button onclick="op(4);">나눗셈</button>

    <script>
        function op(operator) { // 숫자값: 1(덧셈), 2(뺄셈), 3(곱셈), 4(나눗셈)

            var num1 = Number(document.getElementById("num1").value);
            var num2 = Number(document.getElementById("num2").value);

            // 결과를 담을 변수
            var result = 0;

            switch(operator) {
                case 1 : result = num1 + num2;
                break;
                case 2 : result = num1 - num2;
                break;
                case 3 : result = num1 * num2;
                break;
                case 4 : result = num1 / num2;
                break;
                default : result = "올바른 연산자가 아닙니다.";
            }

            document.getElementById("result").innerHTML = "결과: " + result;
        }

    </script>

 

저작자표시 비영리 변경금지 (새창열림)
'📗 self-study/📗 KH정보교육원 당산지원' 카테고리의 다른 글
  • [JavaScript] 09_객체 2
  • [JavaScript] 08_객체 1
  • [JavaScript] 06_배열
  • [JavaScript] 05. 문자열과 숫자
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[JavaScript] 07_함수(function)
상단으로

티스토리툴바