본문 바로가기

JS/JavaScript

[JavaScript] 함수

728x90

사용자 정의 함수
- 하나의 특별한 목적의 작업을 수행하도록 설계된 독립적인 블록을 의미
- 함수는 필요할 때마다 호출하여 해당 작업을 반복해서 수행하기 때문에 코드를 재활용할 수 있음

함수 선언식
function 함수명(매개변수1, 매개변수2 ..) {
    ...
    return 값;
}

함수 표현식
const 함수명 = function(매개변수1, 매개변수2..) {
    ...
    return 값;
}

✅ 자바스크립트는 함수를 변수(상수)에 저장할 수 있음
✅ 자바스크립트는 script 태그를 만나면 자바스크립트를 읽고 선언된 함수, var로 선언된 변수를 먼저 메모리에 저장


<!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>함수1</title>
</head>
<body>
    <h2>함수1</h2>
    <script>
        'use strict';
        function func1() {
            console.log('func1 함수 호출!');
        }

        func1();
        func1();
        func1();

        function func2(num) {
            console.log(`전달받은 매개변수의 값 : ${num}`);
        }

        func2(10);
        func2(4);

        function func3(start, end) {
            let sum = 0;
            for (let i = start; i <= end; i++) {
                sum += i;
            }
            console.log(`${start}부터 ${end}까지의 총 합 : ${sum}`);
        }

        func3(2, 15);
    </script>
</body>
</html>


<!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>함수 - 2</title>
</head>
<body>
    <h2>함수 - 2</h2>
    <script>
        'use strict';
        function func1(name='무명') {
            console.log(`당신의 이름은 ${name}입니다`);
        }

        func1('김사과');
        func1(); // name이 '무명'으로 설정됨

        function func2(num1, ...num2) {
            console.log(`num1의 값 : ${num1}`);
            console.log(`num2의 값 : ${num2}`);
        }

        func2(10, 30, 20, 70, 100); // num1에는 10, num2에는 30, 20, 70, 100이 배열로 저장됨

        function func3(... jumsu) {
            let total = 0;

            for (let i in jumsu) {
                total += jumsu[i];
            }
            console.log(`총점 : ${total}`);
        }
        func3(80, 90, 70);
        func3(80, 90, 70, 100, 20);

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

 


호이스팅(hoisting)
- 코드가 실행되기 전 변수선언/함수선언을 최상단으로 끌어 올려진 것 같은 현상
- var 변수, 함수 선언식은 호이스팅이 일어남

<!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>호이스팅</title>
</head>
<body>
    <h2>호이스팅</h2>
    <script>
        'use strict';
        func1(); // 함수 선언식은 메모리에 먼저 로드되어 실행됨.
        func2(); // 함수 표현식은 메모리에 먼저 로드되지 않기 때문에 에러.

        function func1() { // 함수 선언식
            alert('func1 호출되었습니다!');
        }

        const func2 = function() { // 함수 표현식
            alert('func2 호출되었습니다!');
        }



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

func1 호출
func2 호출시 에러

 

 

 

728x90