🍁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를 출력한다.