Programming/JavaScript

[JavaScript] Function (함수)

Isaac S. Lee 2023. 10. 4. 17:35

🍁Function


Java Method

자바의 메서드는 아래의 양식으로 만들어진다.

public [static] int m1 (int num) {
    return 10;
}

자바스크립트는 접근 지정자 표현이 없으므로 public을 생략한다.

static은 정적인지를 묻는 키워드인데, 이 또한 클래스가 있어야 작성하는 것이므로 클래스가 없는 자바스크립트에서는 생략한다.

자바스크립트에서는 자료형(number, string, boolean, object)을 명시적으로 표현이 불가능하다.

돌려주는 자료형을 선언하고 싶어도 명시적인 표현이 불가능하기 때문에 자바스크립트에서는 메서드 이름이 가장 처음에 나온다.

더 이상의 자세한 설명은 생략한다.

 

JavaScript Function

function m1(num) {
    return 10;
}

num 앞에 var을 쓰면 에러가 발생하므로 var 또한 생략한다.

메서드 이름이 가장 처음 나오는 대신, 함수라는 것은 알 수 있도록 앞에  function을 작성해 주었다.

 

함수의 사용

<!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 m1() {
            console.log('m1 함수 호출');
        }

        m1(); //m1 함수 호출

        function m2(name) {
            console.log('name: ' + name);

            console.log(arguments[0]);
            console.log(arguments[1]);
        }

        m2('Isaac'); //name: Isaac
        m2('Sopia'); //name: Sopia
        m2(); //name: undefined (사용 X)
        m2('Isaac', 'Sopia'); //name: Isaac (사용 X)
    </script>
</body>
</html>

m2 함수에 인자를 안 넣고 호출하면 undefined가 출력되고, 'Isaac'과 'Sopia'로 인자를 2개를 넣으면 'Isaac'만 출력된다.

이때 내장 배열 0번에 'Isaac'이 들어 있고, 1번에 'Sopia'가 들어 있는 것을 확인할 수 있다.

실제로 출력되는 것은 'Isaac'뿐이지만, 'Sopia'도 값에 내장 배열에 들어 있는 것이다.

 

내장 배열

  • arguments(인자값)

자바스크립트에는 내장 배열이 존재한다.

우리가 배열을 만들지 않아도 자바스크립트가 자동으로 배열을 만드는 것을 의미한다.

그중에서도 arguments는 함수의 실인자값들을 저장하는 내장 배열이다.

 

값이 없음

var num1 = null;
console.log(num1); //null

var num2;
console.log(num2); //undefined
  • null: 개발자가 의도적으로 비워놓은 상태
  • undefined: 변수가 선언된 직후(초기화되기 전) 상태

null과 undefined는 모두 값이 없음을 의미하지만, 개발자가 일부러 만든 빈 공간과 자연스럽게 발생한 빈 공간이라는 점에서 차이가 있다.

 

진성 비교 연산자

  • ==, !=: 자료형의 비교를 하지 않으며, 값만을 비교한다.
  • ===, !===: 자료형의 비교와 값의 비교를 모두 한다.

===, !===는 진성 비교 연산자이다.

console.log(undefined == null); //true
console.log(undefined === null); //false
console.log(undefined != null); //false
console.log(undefined !== null); //true

console.log(10 == '10'); //true
console.log(10 === '10'); //false

진성 비교 연산자는 값뿐만 아니라 자료형까지도 비교한다.

그래서 undefined와 null을 일반 비교로 물어보면 똑같이 값을 가지고 있지 않으므로 true를 출력하지만, 진성 비교 연산자로 같은지를 물어보면 자료형이 다르므로 false를 출력한다.