본문 바로가기
Frontend/JavaScript

JavaScript의 기초 문법 : 함수

by 코딩쥐 2024. 7. 22.

함수는 어떤 목적을 가진 작업들을 수행하는 코드 블록으로, 여러 곳에서 실행 가능하고(재사용성), 유지보수가 용이하며 가독성을 높일 수 있다. 

  • function 함수명 (매개변수1, 매개변수2, .. 매개변수n){
    로직
    return 반환값
    }

    함수를 선언할 때 사용하는 방법이다. 함수를 사용하게 되면 로직이 수행된 후에 반환값을 도출한다. 함수를 작성하는 방법은 다양하다.
    1. 매개변수, 리턴타입이 둘다 없는 경우
    2. 매개변수, 리턴타입이 둘다 있는 경우
    3. 매개변수는 있는데 리턴타입은 없는 경우
    4. 매개변수가 없고 리턴타입이 있는 경우
  • 함수명(매개변수 값);
    함수 사용할 때는 함수명을 불러온 후에 매개변수로 사용할 값을 작성하면 된다.

 

함수 작성법

  1. 숫자로 시작할 수 없다.
  2. 대소문자를 구분해야 한다. 
  3. 이미 정의된 예약어는 사용이 불가능하다.
  4. 특수문자는 '_' 외에는 사용하지 않는다.

    <아래 내용은 권장사항>
  5. 보통 함수명 앞에 있는 문자는 동사형으로 시작한다. 

 

함수 선언 종류

함수선언문

가장 자주 사용되는 방법이다.

  • function 함수명 (인자){
    로직
    return 반환값
    };

 

익명 함수 표현식

변수에 함수를 넣어서 사용하는 방법으로, 함수명이 빠진 형태의 함수 표현식이다. 함수의 내용을 다른 변수에 복사해서 값처럼 쓰는 것이 가능하다. 

  • let 변수명 = function(인자){
                        로직
                       return 반환값
                        };

  • Arrow 함수
    Arrow 함수는 function(){}의 형태를 축약한 것으로, 익명함수이며 함수를 호출하기 위해서 변수를 통해 할당되어야 한다.
    • (매개변수) => {코드};

 

기명 함수 표현식

기존 이름을 호칭했던 함수를 변에 넣어 선언한다. 잘 사용되진 않는다.

  • let 변수명 = function 함수명 (인자){
                        로직
                       return 반환값
                        };
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function add(a,b){
            return a+b;
        }
        function substract(a,b){
            return a-b;
        }
        function multiply(a,b){
            return a*b;
        }
        function divide(a,b){
            return a/b;
        }

        console.log(add(6,3));
        console.log(substract(6,3));
        console.log(multiply(6,3));
        console.log(divide(6,3));
    </script>
</body>

</html>


Default Parameter

설정한 매개변수와 입력한 매개변수의 값이 맞지 않을 때가 있다. 값을 적게 넣었을 경우에 정의되지 않은 나머지 매개변수들은 'undefined'로 해당값을 초기화 한다. 초기화 값은 다른 것으로도 설정이 가능하다. 

  • function 함수명(인자1,인자n = 초기화값){
    로직
    };
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function funcA(a,b = "하늘"){
            console.log(`좋아하는 단어 ${a}, ${b}`);
        }

        funcA("바다");
    </script>
</body>

</html>

매개변수를 전부 다 작성하지 않아도 정의되지 않은 나머지 매개변수에  "하늘"이라는 단어가 들어간 것을 확인할 수 있다.

 

Rest Parameter

설정한 매개변수와 입력한 매개변수의 값이 맞지 않을 때가 있다. 값을 더 많이 넣었을 경우에는 매개변수 개수만큼의 값만을 받고 나머지 값은 argument라는 유사배열객체에 저장된다. Rest Parameter의 경우 ECMA6 이후에 나온 방법으로, 함수 인자에 '...'을 작성하게 되면 넘치는 매개변수를 배열로 전달받을 수 있다. rest parameter('...')은 인자들 뒤에 작성되어야 한다. 

  • function 함수명(인자1, 인자2,...인자n){
    로직
    };
    인자1, 인자2는 로직에 의해 수행되고, 나머지 값은 rest parameter에 저장된다. 
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        function funcA(a,b,...c){
            console.log(a,b);
            console.log(c);
        }
        
        funcA(1,2,3,4,5,6,7,8,9);
    </script>
</body>

</html>

넘치게 작성된 매개변수가  c에 배열로 저장된 모습을 볼 수 있다.