🍴 rest parameter
: 함수 매개변수 목록에서 남은 인수들을 배열로 모으는 방법. 함수가 가변 인수를 받아 처리할 수 있게 해줌.
function sum(...numbers) {
return numbers.reduce((acc, current) => acc + current, 0);
}
console.log(sum(1, 2, 3)); // 6
console.log(sum(1, 2, 3, 4, 5)); // 15
🍴 함수의 두 가지 기능
1. 일반 함수
- 함수 이름 직접 호출하여 실행
- this 바인딩: 호출 맥락에 따라 다르게 바인딩. 기본적으로 전역 객체 참조, 객체의 메서드로 호출 시 해당 객체 참조.
- 명시적으로 return 문 사용하지 않을 시 undefined 반환
2. 생성자 함수
- 객체 인스턴스를 생성하기 위해 사용
- 보통 첫 글자를 대문자로 정의, new 연산자와 함께 호출
- this 바인딩: 명시적으로 다른 객체 반환하지 않을 시 새로 생성된 객체 반환
🍴 this의 역할
: 현재 실행 중인 함수나 메서드가 참조하는 객체를 가리키는 키워드. this의 값은 함수가 어떻게 호출됐는지에 따라 달라짐.
1. 전역 컨텍스트
- 전역 컨텍스트에서 this는 전역 객체 참조
- 브라우저 환경 - window, Node.js 환경 - global
2. 객체의 메서드 호출
- 해당 메서드를 소유한 객체 참조
3. 생성자 함수
- 새로 생성된 객체 참조
🍴 재귀(Recursion)
: 함수가 자기 자신을 호출하는 프로그래밍 기법.
- 재귀 사용 시 복잡한 문제를 작은 문제로 나누어 쉽게 해결 가능
재귀 함수의 구조
- 기저 조건(base case): 재귀 호출 멈추고 결과 반환하는 조건
- 재귀 단계(recursive step): 함수가 자기자신을 호출하여 문제를 더 작은 부분으로 나눔
function factorial(n) {
// 기저 조건: n이 0 또는 1일 때
if (n === 0 || n === 1) {
return 1;
}
// 재귀 단계: n * factorial(n - 1)
return n * factorial(n - 1);
}
console.log(factorial(5)); // 120 (5 * 4 * 3 * 2 * 1)