JS/Javascript

[javascript] 함수 2-1 / 기명함수와 익명함수

ui-o 2025. 7. 30. 17:45
반응형

기명 함수 (Named Function) 

  • 이름이 있는 함수
  • function() 뒤에 이름이 있는 함수  ⇒ function 함수명()
  • 함수 선언식은 기본적으로 기명함수 
  • 디버깅할 때 스택 트레이스에 함수 이름이 찍히고, 함수 내부에서 재귀 호출도 가능해서 오류 찾기와 복잡한 로직 작성에 유리

특징

특징설명
디버깅하기 쉬움에러 스택 트레이스에 함수 이름이 명확히 표시됨
재귀 호출 가능함수 내부에서 자기 이름으로 자신을 호출할 수 있음
명확한 의도 표현 가능함수가 무엇을 하는지 이름만 보고 알 수 있음

 

function greet() {
  console.log("Hello!");
}

익명 함수 (Anonymous Function) 

  • 이름이 없는 함수,
  • function() 뒤에 이름이 없는 함수  ⇒ function()
  • 보통 함수 표현식 형태로 사용됨
  • 함수 자체에는 이름이 붙어 있지 않고, 변수에 할당되거나 다른 함수의 인자로 바로 사용
  • 콜백 함수, 즉시 실행 함수, 일회성 로직 등에 활용됨
  • 이름이 없어서 코드가 더 간결하지만 디버깅이 어려울 수 있음
  • 단독으로 사용하면 문법 오류, 반드시 표현식 형태로 써야 함

익명 함수의 특징

특징설명
이름 없음디버깅할 때 콘솔에 anonymous로 나올 수 있음
재귀 호출 불가함수 내부에서 자기 자신을 호출할 수 없음 (이름이 없으니까)
주로 콜백이나 즉시 실행용이벤트 핸들러, map, filter, setTimeout 등에 자주 쓰임
일회성 사용에 적합한 번만 실행하면 되는 로직에 간결하게 사용 가능
// [기본 형태]
// 아래와 같이 단독으로 쓰면 문법 오류, 반드시 표현식 형태로 써야 함
function() {

}

익명 함수의 사용 

1. 변수에 할당해서 사용

const sayHello = function() {
  console.log("Hello!");
};

2. 콜백 함수로 사용

/*
setTimeout의 인자로 익명 함수를 전달
딱 이 자리에만 쓰이는 일회성 함수로 자주 사용됨

*/
setTimeout(function() {
  console.log("3초 후 실행");
}, 3000);

3. 즉시 실행 함수에서 사용

(function() {
  console.log("바로 실행됨!");
})();

예외 : 이름 있는 함수 표현식

  • 함수 표현식이라고 모두 익명함수만 오는 것이 아닌 기명함수도 올 수 있음
/*
함수 표현식이지만 익명 함수는 아님, inner라는 이름이 붙은 기명 함수 표현식임
*/
const test = function inner() {
  console.log("안녕");
};

 


익명함수와 기명함수 비교

구분  기명 함수익명 함수
함수 이름함수에 이름이 명확히 있음함수 이름이 없음
선언 방식함수 선언식 혹은 기명 함수 표현식주로 함수 표현식으로 이름 없이 작성
재귀 호출 가능가능 (자기 이름으로 함수 내부에서 호출 가능)불가능 (이름이 없어서 자기 자신을 참조할 방법 없음)
디버깅 시 이름에러 스택에 함수 이름이 나타나 디버깅 용이익명 함수로 뜰 수 있어서 디버깅이 불편할 수 있음
호출 방법함수 이름 혹은 변수명으로 호출 가능변수명으로 호출 가능 (변수에 할당한 경우)
예시function greet() { ... }
const fn = function hello() { ... }
const fn = function() { ... }
setTimeout(function() { ... }, 1000)
반응형