Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 중첩 함수(Nested Function)란? 개념과 예제 총정리

자바스크립트 중첩 함수(Nested Function)란?

자바스크립트에서는 함수 내부에 또 다른 함수를 정의할 수 있습니다. 이렇게 다른 함수 안에 선언된 함수를 중첩 함수(nested function), 즉 내부 함수라고 부릅니다. JavaScript 1.2부터 함수 정의를 다른 함수 안에 중첩하는 것이 공식적으로 허용되었습니다.

다만 한 가지 제한 사항이 있습니다. 함수 정의는 반복문(for, while 등)이나 조건문(if 등) 내부에는 작성할 수 없습니다. 이러한 제약은 function 키워드를 사용하는 함수 선언(function declaration) 방식에만 적용되며, 함수 표현식(function expression)에는 해당하지 않습니다.

중첩 함수의 주요 특징

  • 내부 함수는 외부 함수의 매개변수와 지역 변수에 자유롭게 접근할 수 있습니다(스코프 체인).
  • 내부 함수는 외부 함수 내부에서만 유효하며, 외부에서 직접 호출할 수 없습니다.
  • 외부 함수가 내부 함수를 반환하면 클로저(closure) 형태로 활용할 수도 있습니다.

예제 코드

아래 예제는 두 변의 길이를 받아 직각삼각형의 빗변(hypotenuse) 길이를 계산합니다. 외부 함수 hypotenuse() 안에 제곱을 계산하는 내부 함수 square()가 중첩되어 있으며, Math.sqrt()를 통해 최종 결과를 구합니다.

<html>
   <head>
      <script>
         function hypotenuse(a, b) {
            function square(x) { return x*x; }
            return Math.sqrt(square(a) + square(b));
         }
         function secondFunction(){
            var result;
            result = hypotenuse(3,4);
            document.write ( result );
         }
      </script>
   </head>
   
   <body>
      <p>Click the following button to call the function</p>
      <form>
         <input type = "button" onclick = "secondFunction()" value = "Find Hypotenuse">
      </form>
   </body>
</html>

위 코드를 실행하고 버튼을 클릭하면 secondFunction()이 호출되고, hypotenuse(3, 4)가 실행됩니다. 피타고라스 정리에 따라 √(3² + 4²) = √25, 즉 결과값 5가 화면에 출력됩니다.

이처럼 중첩 함수를 활용하면 특정 외부 함수에서만 필요한 보조 로직을 내부에 캡슐화할 수 있어, 코드의 가독성과 유지보수성을 높일 수 있습니다.