자바 스크립트에서 가장 중요한 핵심 개념이다.
일련의 과정을 문으로 구현하고 코드 블록으로 감싸서 하나의 실행단위로 정의한 것을 함수라고 한다.
내부로 입력을 전달받는 변수를 매개변수, 입력을 인수, 출력을 반환값이라고 한다.
function add(x,y){
return x+y;
}
let result = add(2,5);
console.log(result);
- 코드의 재사용 측면에서 매우 유용 -> 계속 호출할 수 있기 때문에
- 유지보수의 편의성을 높이고 코드의 신뢰성을 높임
- 코드의 가독성을 향상시킴.
-
함수 이름
- 식별자 네이밍 규칙 준수
- 함수 이름은 함수 몸채 내에서만 참조할 수 있는 식별자
- 함수 이름은 생략 가능, 이름이 있으면 기명 함수, 없으면 무명/익명 함수라고 부름.
-
매개변수 목록
- 매개변수를 소괄호로 감싸고 쉼표로 구분
- 함수를 호출할 때 지정한 인수가 순서대로 할당. 순서에 의미가 존재
- 매개변수는 함수 몸채 내에서 변수와 동일하게 취급
-
함수 몸체
- 일괄적으로 실행될 문들의 하나의 실행 단위로 정의한 코드 블록
- 함수 호출에 의해 실행됨.
함수는 객체다.
function add(x,y){
return x+y;
}
var add = function (x,y)
{
return x+y;
};
- 함수 선언문은 함수 이름 생략 불가
- 함수 선언문은 표현식이 아닌 문이다.
- 생성된 함수를 호출하기 위해 함수 이름과 동일한 식별자를 암묵적으로 생성한 후 거기에 함수 객체를 할당하는 방법
- 함수 객체를 가리키는 식별자로 호출
- 함수 선언문으로 정의한 함수와 표현식으로 정의한 함수의 생성 시점은 다르다.
- 함수 선언문도 런타임 이전에 먼저 실행되며, 함수 선언문 이전에 함수를 참조할 수 있고 호출도 가능하다. 이러한 동작을 함수 호이스팅이라고 한다.
3. 함수 표현식의 함수 리터럴도 할당문이 실행되는 시점에 평가되어 함수의 객체가 된다.
- 매개변수는 함수를 정의할 때 선언하고, 내부에서 변수와 동일하게 취급한다.
- 매개변수는 함수 몸체 내부에서만 참조할 수 있고 외부에서는 참조할 수 없다.
- 매개변수의 개수와 인수의 개수가 일치하는지 체크하지 않는다. 인수가 부족하여 할당이 안된 매개변수의 값은 undefinded로 할당된다.
- 매개변수보다 인수가 더 많으면 초과된 인수는 무시한다.
5. 매개변수는 최대 3개 이상을 넘지 않는 것을 권장한다. -> 이상적인 함수는 한 가지 일만, 가급적 작게 동작해야하기 때문.
- 함수가 자기 자신을 호출하는 것을 재귀 호출이라 하는데, 재귀 호출을 수행하는 함수가 재귀 함수이다.
- 재귀 함수 내에는 반드시 멈출 수 있는 탈출 조건이 존재해야 한다.
- 반복문 보다 재귀 함수를 사용하는 것이 직관적으로 이해하기 쉬울 경우에만 한정적으로 사용한다.
- 함수 내부에 정의된 함수를 중첩 함수(내부 함수)라고 부름
- 중첩 함수를 포함하는 함수는 외부 함수
- 일반적으로 중첩 함수는 외부 함수를 돕는 역할을 수행한다.
- 함수의 매개변수를 통해 다른 함수의 내부로 전달되는 함수를 콜백 함수라고 부름.
- 콜백 함수를 전달받은 함수는 고차 함수라고 부름.
- 고차 함수는 콜백 함수를 자신의 일부분으로 합성.
- 고차 함수는 매개변수를 통해 전달받은 콜백 함수의 호출 시점을 결정하여 호출
- 즉, 콜백 함수는 ‘고차 함수’를 통해 호출되며, 필요에 따라 콜백 함수에 인수까지 전달함.