Named Function Expression(기명 함수 표현식)

Named Function Expression (기명 함수 표현식)

예제 코드는 아래 링크에서 확인할 수 있습니다.

sourcecode

 

GitHub - yesaroun/JavaScriptStudy: javascirpt 공부

javascirpt 공부. Contribute to yesaroun/JavaScriptStudy development by creating an account on GitHub.

github.com

 

기명 함수 표현식은 함수 표현식으로 함수를 만들 때 함수 내부에 정의된 이름이 있는 함수 유형입니다.

이 이름은 식 내부에서 함수를 참조하는 데 사용할 수 있습니다.

아래 예시가 기명 함수의 예시입니다.

let myFunc = function hi() {
  console.log("hi!");
};

myFunc();   // hi!

다만 함수를 외부에서 함수를 호출할 때 사용할 수는 없습니다.

// hi();    // ReferenceError

 

기명 함수가 필요한 경우

기명 함수가 필요한 경우는 주로 재귀 함수를 사용하는 경우입니다.

 

예1 - countdown

let countdown = function (n) {
  console.log(n);

  if (n === 0) {
    console.log('End!');
  } else {
    countdown(n - 1);
  }
};

countdown(5);

만약 이 'countdown'함수를 복사하려고 다른 변수에 똑같이 담았다가, countdown 변수에 담긴 값이 변하게 되면 문제가 발생합니다.

let countdown = function (n) {
  console.log(n);
  if (n === 0) {
    console.log("END!");
  } else {
    countdown(n - 1);
  }
};

let myFunction = countdown;

countdown = null;

myFunction(5);    // TypeError

myFunction 함수를 호출했을 때, 함수가 실행되긴 하지만, 6번 줄 동작을 수행할 때 호출하려는 countdown 함수가 이미 12번에서 null 값으로 변경되었기 때문에 함수가 아니라는 TypeError가 발생한 것입니다.

이런 상황을 방지하기 위해서 함수 내부에서 함수 자신을 사용하려고 하면 함수표현식에서는 반드시 기명 함수 표현식을 사용하는 것이 좋습니다.

let countdown = function printCountdown(n) {
  console.log(n);
  if (n == 0) {
    console.log('End!');
  } else {
    printCountdown(n - 1);
  }
};

let myFunction = countdown;

countdown = null;

myFunction(5);

 

예2 - factorial

let factorial = function fact(n) {
  if (n === 0) {
    return 1;
  } else {
    return n * fact(n - 1);
  }
};

console.log(factorial(5));

'JavaScript > JavaScript' 카테고리의 다른 글

sort 메소드  (0) 2023.09.06
일급 객체(First-class citizen)과 고차 함수(Higher-order function)  (0) 2023.04.12
BigInt  (0) 2023.04.09
Primitive Type, Null과 undefined  (0) 2022.12.13
Event Bubbling과 화살표 함수  (0) 2022.12.12