Eggs Sunny Side Up
본문 바로가기
Web/JavaScript

함수

by guswn100059 2023. 4. 18.

[함수]
쓰는이유: 기능을 담으려고, 유지보수 편하게 하려고

함수의 종류
1) 함수 선언문
2) 함수 표현식
3) 화살표 함수

1) 특징: 호이스팅이 된다
- 호이스팅 : js 엔진이 실행되면서 함수가 위로 끌어올려지는 현상


함수
왜? 내가 편하려고! 기능을 블록으로 묶어서 사용
- input(매개변수) / output(반환데이터)

- 1. 함수선언문
(선언) function hello(매개변수) {
   console.log('안녕');
           }
(호출) hello();

- 2. 함수표현식
hello = function(매개변수) {
           console.log();
   }
함수선언문은 인자값으로 전달이 가능하다!!
setTimeout( hello , 3000 );

- 3. 화살표함수
let hello = () => {
   console.log();
      }
매개변수가 하나일 때 소괄호 생략 가능
let hello = name => { 기능 }

결과가 반환될 때 한줄일 경우 return, {} 생략 가능
let hello = name => console.log();


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 함수
        // : 특별한 목적의 작업을 수행하기 위해서 독립적으로 설계된 블록
        // - "내가 편하게 사용하기 위해서 만드는 기능"
        // - 함수를 정의할 때 input(입력, 매개변수), output(출력, 반환데이터)를 고려해야 함
        // 함수선언방식 : 함수선언문, 함수표현식, 화살표함수

        // 함수선언방식
        // 1. 함수선언문
        // - 함수선언문으로 정의한 후 함수호출 시 어디에서든 호출 가능!
        // - JS엔진이 자바스크립트 내용 중에서도 선언된 부분들을(var, 함수선언문)
        //   위로 끌어올려서 먼저 실행되는 방식

        // ★ 함수 호이스팅 ★ : 함수선언문이 자바스크립트 엔진에 의해서 먼저 실행되는 방식
        //                      원하지 않은 실행결과가 나올 수 있기 때문에
        //                      최근 트렌드는 함수표현식(+화살표함수)를 자주 사용

        greet();
        // 함수 정의
        function greet() {
            console.log("안녕하세여");
        }

        // 함수 호출
        greet();


        // 2. 함수표현식 (ES6문법)
        // - 함수를 값으로 취급
        // - 다른 함수의 인자값으로 전달이 가능

        // greet2는 변수이고, 초기화하기 전에 호출 -> 오류!
        // greet2(); => 오류코드

        greet2 = function() {
            console.log("hi");
        }

        greet2();

        // console.log(name);
        // var name = "꼬기";

        greet3 = function greet3(name) {
            console.log(name);
        }

        greet3("꼬기");


        // 다른 함수의 인자값으로 전달 예시
        const message = function() {
            console.log("이 메시지는 3초 이후에 보여집니다.");
        }
        setTimeout(message, 3000); // 3초 이후에 실행
        

        // 3. 화살표함수(ES6문법)
        // let greet4 = (name) => {
        //     console.log("내 이름은 "+name);
        // }
        
        // return 사용해보기
        let greet4 = name => {
            return("안녕 I wanna eat "+name);
        }
        console.log(greet4("꼬기"));

        // 실행 결과를 반환할 때 실행문이 한 문장일 경우 return, {} 생략가능
        let greet5 = (name) => console.log(name+"내놔");
        console.log(greet5("꼬기"));

    </script>
</body>
</html>

 

예제 1)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 두 정수를 입력받은 수의 합을 반환하는 addNumber() 함수 구현
        let num1 = Number(prompt("첫 번째 정수 입력"));
        let num2 = Number(prompt("두 번째 정수 입력"));

        // 화살표함수
        let total = (total) => console.log("두 숫자의 합은 "+total+"입니다.");
        console.log(total(num1+num2));

        let addNumber = (n1, n2) => {
            return n1+n2;
        }

        // 함수선언문
        function total3() {
            console.log("두 숫자의 합은 "+(num1+num2)+"입니다.");
        }
        total3();
        
        function addNumber(n1, n2) {
            return n1+n2;
        }
        
        // 함수표현식
        total2 = function total2(a, b) {
            console.log("두 숫자의 합은 "+(a+b)+"입니다.");
        }
        total2(num1, num2);

        let addNumber = function(n1, n2) {
            return n1+n2;
        }


        // 함수 호출
        let result = addNumber(num1, num2);
        console.log("두 숫자의 합 : "+result);
        
    </script>
</body>
</html>

 

예제 2)

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 문제. 이모지🍖와 숫자를 입력받은 후 피라미드 모양 출력
        // 1. 이모지랑 숫자를 입력받는다.
        // 2. 두 입력값을 pyramid() 전달
        // 3. 전달받은 값을 이용해서 피라미드 모양 출력

        let img = prompt("이모지를 입력하세요");
        let num = Number(prompt("몇 줄을 출력할지 입력하세요"));

        // 함수표현방식
        let pyramid = function (a, b) {
            for (let i = 1; i <= b; i++) {
                for(let j = 1; j <= i; j++) {
                    document.write(`<span>${a}</span>`);
                }
                document.write("<br>") 
            }
        }

        // 함수선언방식
        function pyramid(a, b) {
            for (let i = 1; i <= b; i++) {
                for(let j = 1; j <= i; j++) {
                    document.write(a);
                }
                document.write("<br>") 
            }
        }


        pyramid(img, num);

        



    </script>
</body>

</html>

'Web > JavaScript' 카테고리의 다른 글

객체 실습  (0) 2023.04.20
객체  (0) 2023.04.19
랜덤배열, 점수출력 예제  (0) 2023.04.17
배열  (0) 2023.04.17
랜덤수  (0) 2023.04.17

댓글