함수를 생성하는 방법 3가지
1. 함수 선언문 (function statement)
2. 함수 표현식 (function expression)
3. Function() 생성자 함수
이때 함수 선언문과 함수 표현식은 함수 리터럴 방식으로 함수를 생성한다.
자바스크립트에서 함수명은 선택사항이다. 이름이 없는 함수를 익명함수(anonymous function) 라고 한다.
자바스크립트 함수 리터럴은 function 키워드로 시작.
함수 선언문 방식으로 선언된 함수는 이름이 있어야 한다.
function add(x,y) {
return x+y;
}
console.log(add(3, 4)); // (출력값) 7
함수 표현식 방법으로 함수 생성하기
자바스크립트에서는 함수도 하나의 값처럼 취급한다. (이러한 특징 때문에 j.s에서의 함수는 일급객체라고 한다.)
따라서 함수도 숫자나 문자열처럼 변수에 할당하는 것이 가능하다.
let add = function (x, y) {
return x+y;
};
console.log(add(3, 4)); // (출력값) 7
함수 선언문과 함수 표현식의 차이
문법이 거의 유사하다. 차이점은 함수 선언문에서는 이름을 필수로 써주어야 하지만, 함수 표현식에서는 함수 이름이 선택사항이다. 보통 사용하지 않는다.
함수 표현식에서 사용된 함수 이름이 외부 코드에서 접근 불가능 하다.
함수 표현식에 사용된 함수 이름은 정의된 함수 내부에서 해당 함수를 재귀적으로 호출하거나 디버거 등에서 함수를 구분할 때 사용한다.
ex) 팩토리얼 함수
let factorialA = function factorial(n) {
if (n <= 1) {
return 1;
}
return n * factorial(n-1);
};
console.log(factorialA(3)); // (출력값) 6
console.log(factorial(3)); // (출력값) undefined
함수 선언문으로 정의한 함수는 자바스크립트 엔진에 의해 함수 표현식 형태로 변경되어 함수 외부로 호출된다.
함수 선언문 방식으로 선언된 함수의 경우에는 세미콜론(;)을 붙이지 않지만, 함수 표현식 방법으로 선언된 경우에는 끝에 세미콜론(;) 을 붙이는 것을 권장한다.
자바스크립트는 C와 같이 세미콜론 사용을 강제하지는 않는다. 자바스크립트 인터프리터가 자동으로 세미콜론을 삽입시켜주기 때문이다. 그런데 신경쓰지 않으면 심각한 디버깅 상황에 직면할 수 있다.
function() 생성자 함수
new Function(arg1, arg2, ..., argN, functionBody)
arg1, arg2, ..., argN : 함수의 매개변수
functionBody : 함수가 호출될 때 실행될 코드를 포함한 문자열
let add = new Function('x', 'y', 'return x+y');
console.log(add(3, 4)); // (출력값) 7
더글러스 크락포드는 함수 호이스팅을 이유로 함수 선언문보다는 함수 표현식을 사용할 것을 권장한다고 한다.
=> 함수 호이스팅은 함수를 사용하기 전에 반드시 선언해야 한다는 것을 무시하므로 코드의 구조를 엉망으로 만들 수 있다.
'JAVASCRIPT' 카테고리의 다른 글
[JavaScript] 원시 자료형 (0) | 2022.12.26 |
---|---|
[JavaScript] 변수 (0) | 2022.12.26 |
[JavaScript] 배열 (0) | 2022.12.15 |
[JavaScript] 객체 (0) | 2022.12.15 |
[JavaScript] 기초 (0) | 2022.12.15 |