자바스크립트 질문이요!!

자바스크립트 질문이요!!

QA

자바스크립트 질문이요!!

본문

    <script>

        //var num = 0;

        function testFnc(num){

            num++;

            document.write(num+"<br>");

            if(num == 10) return;

 

            testFnc(num);

            document.write(num+"<br>");

        }

 

        testFnc(0);

    </script>

10까지 갔다가 왜 역주하는지를 모르겠네요;;

자세히 설명해주세요...

이 질문에 댓글 쓰기 :

답변 3

간단합니다. 재귀에서 빠져나오면서 그냥 찍히는겁니다

 

리턴 받을때까지 이프문 숫자만큼 재귀 할거잖아요?

리턴 받으면 그 함수 자체를 빠져나오게 되고, 그 빠져나온 함수를 콜했던 함수의 넘버가 차례대로 찍히는 것 뿐이라는거죠

 

예를 들어 10이 되면 함수를 빠져나오게 되고 num이 9였던 함수로 되돌아가게됩니다.

그리고 그 함수가 자연스레 끝나고, 앞서 있던 것들이 차례대로 끝나고 종료되는 것 일뿐입니다.

 

이해가 안되시면 댓글 남겨주세요. 좀 더 자세하게 설명드릴게요

음 인셉션 영화 보셨는지요? 재귀함수를 그렇게 한번 생각해봅시다. 꿈속의 꿈처럼 함수속의 자기 자신의 함수가 열리게 됩니다. 영화에서 꿈속의 꿈이 쾅 터지듯이, 함수속의 함수도 쾅하고 터지면요, 그 전 함수의 변수값이 찍히고 다시 쾅하고, 다시 그 전의 함수의 변수값이 찍히고 다시 쾅하고를 반복하고 있기에, 숫자가 점점 작아지는 겁니다

함수속의 함수, 그리고 또 그 함수속의 함수속의 함수. 이런식으로 10번이나 깊은 꿈들의 꿈들의 꿈같이 만들어놓은 겁니다. 지하10층까지 땅굴을 파면, 그만 파고 작업 중지해라~~ 하고, 지하 10층에서 지하 9층으로 9층에서 8층으로 빠져나올때마다 변수를 출력하니 그렇게 되는겁니다.

함수(1)가 함수 자신(2)을 호출하고, (2)를 이행하고 (1) 로 돌아간다는 걸 깨달으면 쉽게 이해가 갈겁니다. 10까지 재귀함수를 만드는 걸 이행하고, 만들어놨던 함수들이 순차적으로 닫히는데, 함수들이 닫히기 직전마다 num을 출력해준거라 생각하시면 됩니다.

마지막 라인 아래 코드 제거하면 역행은 않네요.

document.write(num+"<br>");

 

다만,

저게 어케 반복문처럼 구는지 그게 더 궁금..ㅎ

제 생각엔 함수가 맨앞과 맨뒤를 시작으로 해서 점차적으로 안쪽으로 작동하도록 아마도 JS로직이 그렇게 되어 있는게 아닐까 싶네요. 저걸 왜 그러냐고 궁금해하면..... 으음.....
1+1=2 가 왜 2가 되냔 물음과 같은 시작점이 되지 않을까 싶습니다.

JS는 저렇게 자기 함수를 내부적으로 갖고 있는 경우,
반환 명령어 갖고 있기 전엔 양쪽 끝부터 처리해간다고 그냥 이해하시는 게 편할 듯 싶네요. ㅎ

미안해요. 만족스런 설명을 못 드려서..... ^^;

답변을 작성하시기 전에 로그인 해주세요.
전체 946
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT