1. 일반 함수 (Function Declarations)
함수 선언문은 function 키워드를 사용하여 정의되는 일반적인 함수이다. 주로 함수 선언문은 전역 스코프나 함수 스코프에서 사용된다.
function add(a, b) {
return a + b;
}
2. 함수 표현식 (Function Expression)
함수가 변수에 할당되는 방식으로, 함수가 값으로 취급된다. 주로 변수에 함수를 할당하는 경우나 익명 함수를 사용할 때 주로 사용된다. 함수 표현식은 익명 함수일 수도 있고, 이름이 있는 함수일 수도 있다.
const add = function(x, y) {
return x + y;
};
2-1. 익명 함수 (Anonymous Function)
함수 이름이 없는 함수를 익명 함수라고 한다. 주로 즉시 실행 함수 (IIFE)나 콜백 함수로 사용된다.
const multiply = function(x, y) {
return x * y;
};
2-2. 이름 있는 함수 (Named Function)
함수에 이름이 있는 경우를 이름 있는 함수라고 한다. 이름 있는 함수 표현식은 함수 내부에서 자기 자신을 참조할 때 주로 사용된다.
const factorial = function factorial(n) {
return n <= 1 ? 1 : n * factorial(n - 1);
};
ES6에서 도입된 간결한 함수 표현식이다. 주로 간단한 콜백 함수나 익명 함수로 사용되며, this를 바인딩하는 방식이 다르다.
const add = (a, b) => {
return a + b;
};
- 매개변수가 하나일 때는 괄호 생략 가능: x => x * 2;
- 함수 본문이 한 줄일 경우 중괄호 생략 가능하며 그 값을 반환함: x => x * 2
- 매개변수가 없을 경우 빈 괄호 사용: () => console.log('Hello')
4. 메서드 (Object Methods)
객체에 속한 함수를 메서드라고 부른다. 메서드는 객체에 속하므로 해당 객체의 속성이나 다른 메서드에 접근할 수 있다.
const person = {
name: 'John',
sayHello: function() {
console.log(`Hello, ${this.name}!`);
}
};
person.sayHello();
- this 키워드
메서드 내에서 this 키워드는 해당 메서드를 호출한 객체를 가리킨다. this를 통해 메서드 내에서 객체의 속성에 접근할 수 있다.
5. 생성자 함수 (Constructor Functions)
new 키워드로 호출되어 객체를 생성하는 함수로, 주로 객체의 인스턴스를 생성할 때 사용된다.
function Car(make, model) {
this.make = make;
this.model = model;
}
const myCar = new Car('Toyota', 'Camry');
6. 콜백 함수 (Callback Functions)
다른 함수의 매개변수로 전달되는 함수로, 해당 함수의 실행이 이벤트 또는 특정 상태에 따라 호출된다.
function fetchData(callback) {
// 비동기 작업 후
callback();
}
fetchData(function() {
console.log('Data fetched!');
});
7. 순수 함수 (Pure Functions)
부수 효과(side effect)가 없고 동일한 입력에 대해 항상 동일한 출력을 반환하는 함수이다.
function add(a, b) {
return a + b;
}
8. 제너레이터 함수 (Generator Functions):
함수 실행을 중간에 멈추고 재개할 수 있는 제너레이터 객체를 생성하는 함수이다.
function* generateNumbers() {
yield 1;
yield 2;
yield 3;
}
const iterator = generateNumbers();
console.log(iterator.next().value); // 1
9. 내부함수 (Inner Function 또는 Nested Function)
함수 내부에서 정의된 함수를 내부(중첩) 함수라고 한다. 이러한 내부 함수는 외부 함수의 스코프에 접근할 수 있다.
function outer() {
const outerVar = 'I am outer!';
function inner() {
console.log(outerVar);
}
inner();
}
10. 자체 실행 함수 (Self-Invoking Function 또는 Immediately Invoked Function Expression - IIFE)
함수를 정의하자마자 즉시 실행되는 함수다. 주로 스코프를 만들거나 초기화 코드를 실행하는 데 사용된다.
(function() {
// 코드 실행
})();
async 키워드를 사용하여 정의되며, 항상 Promise를 반환하는 함수이다.
await 키워드를 사용하여 비동기 작업의 완료를 기다릴 수 있다.
async function fetchData() {
const result = await someAsyncOperation();
return result;
}
12. 재귀 함수(Recursive Function)
재귀 함수는 함수 내부에서 자기 자신을 호출하는 함수를 말한다. 재귀 함수는 보통 어떤 작업을 작은 부분으로 나누어 해결하고자 할 때 사용되는데 예를 들어, 팩토리얼이나 피보나치 수열을 계산하는 데에 재귀 함수가 활용된다.
function factorial(n) {
if (n <= 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
console.log(factorial(5)); // 출력: 120
13. 커링 함수 (Currying Function)
여러 개의 인자를 갖는 함수를 하나의 인자를 받는 함수 체인으로 변환하는 기법이다.
const add = x => y => x + y;
14. 고차 함수 (Higher-Order Function):
다른 함수를 인자로 받거나, 함수를 반환하는 함수다. 자주 사용되는 함수형 프로그래밍의 개념 중 하나이다.
const multiplyBy = factor => num => num * factor;
const double = multiplyBy(2);
15. 폐쇄 함수 (Closure Function):
외부 스코프의 변수에 접근할 수 있는 함수다. 일반적으로 내부 함수가 외부 함수의 변수를 기억할 때 발생한다.
function outer() {
const outerVar = 'I am outer!';
function inner() {
console.log(outerVar);
}
return inner;
}
const closureFunc = outer();
closureFunc(); // 출력: I am outer!
'STUDY > JavaScript' 카테고리의 다른 글
JavaScript에서 배열 변형과 데이터 가공을 위한 map메서드 (0) | 2023.11.17 |
---|---|
JavaScript에서 많이 사용하는 함수들 (0) | 2023.11.17 |
변수선언 키워드 var, let, const의 특징과 주의점 (0) | 2023.11.16 |
this값을 명시적으로 설정하는 메서드 - bind(), call(), apply() (0) | 2023.11.15 |
자바스크립트에서 this 동작 (0) | 2023.11.15 |