\r\n\r\n10까지 갔다가 왜 역주하는지를 모르겠네요;;\r\n\r\n자세히 설명해주세요...\r\n","dateCreated":"2020-10-18T15:11:20+09:00","author":{"@type":"Person","name":"주니준이"},"answerCount":3,"suggestedAnswer":[{"@type":"Answer","text":"즉, 이런 방식으로 작동한다고 보시면 될 듯...\r\n\r\n1a\r\n\r\n    2a\r\n\r\n        3a.....\r\n\r\n        3b .....\r\n\r\n   2b\r\n\r\n1b\r\n\r\n \r\n","author":{"@type":"Person","name":"sinbi"},"dateCreated":"2020-10-18T16:51:31+09:00"},{"@type":"Answer","text":"마지막 라인 아래 코드 제거하면 역행은 않네요.\r\n\r\ndocument.write(num+\"
\");\r\n\r\n \r\n\r\n다만,\r\n\r\n저게 어케 반복문처럼 구는지 그게 더 궁금..ㅎ\r\n","author":{"@type":"Person","name":"sinbi"},"dateCreated":"2020-10-18T15:30:23+09:00"}],"acceptedAnswer":{"@type":"Answer","text":"간단합니다. 재귀에서 빠져나오면서 그냥 찍히는겁니다\r\n\r\n \r\n\r\n리턴 받을때까지 이프문 숫자만큼 재귀 할거잖아요?\r\n\r\n리턴 받으면 그 함수 자체를 빠져나오게 되고, 그 빠져나온 함수를 콜했던 함수의 넘버가 차례대로 찍히는 것 뿐이라는거죠\r\n\r\n \r\n\r\n예를 들어 10이 되면 함수를 빠져나오게 되고 num이 9였던 함수로 되돌아가게됩니다.\r\n\r\n그리고 그 함수가 자연스레 끝나고, 앞서 있던 것들이 차례대로 끝나고 종료되는 것 일뿐입니다.\r\n\r\n \r\n\r\n이해가 안되시면 댓글 남겨주세요. 좀 더 자세하게 설명드릴게요\r\n","author":{"@type":"Person","name":"밯망히"},"dateCreated":"2020-10-18T16:48:38+09:00"}}}
채택완료

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

    <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개 / 댓글 8개

채택된 답변
+20 포인트

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

 

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

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

 

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

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

 

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

답변에 대한 댓글 4개

10이 되면 함수를 빠져나오게 되고 9로 돌아가는게 이해가 안되네요;; 죄송해요...
음 인셉션 영화 보셨는지요? 재귀함수를 그렇게 한번 생각해봅시다. 꿈속의 꿈처럼 함수속의 자기 자신의 함수가 열리게 됩니다. 영화에서 꿈속의 꿈이 쾅 터지듯이, 함수속의 함수도 쾅하고 터지면요, 그 전 함수의 변수값이 찍히고 다시 쾅하고, 다시 그 전의 함수의 변수값이 찍히고 다시 쾅하고를 반복하고 있기에, 숫자가 점점 작아지는 겁니다
함수속의 함수, 그리고 또 그 함수속의 함수속의 함수. 이런식으로 10번이나 깊은 꿈들의 꿈들의 꿈같이 만들어놓은 겁니다. 지하10층까지 땅굴을 파면, 그만 파고 작업 중지해라~~ 하고, 지하 10층에서 지하 9층으로 9층에서 8층으로 빠져나올때마다 변수를 출력하니 그렇게 되는겁니다.
함수(1)가 함수 자신(2)을 호출하고, (2)를 이행하고 (1) 로 돌아간다는 걸 깨달으면 쉽게 이해가 갈겁니다. 10까지 재귀함수를 만드는 걸 이행하고, 만들어놨던 함수들이 순차적으로 닫히는데, 함수들이 닫히기 직전마다 num을 출력해준거라 생각하시면 됩니다.

즉, 이런 방식으로 작동한다고 보시면 될 듯...

1a

    2a

        3a.....

        3b .....

   2b

1b

 

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

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

 

다만,

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

답변에 대한 댓글 4개

역행을 없애고 싶은게 아니고 왜 되는지가 궁금해서요....
아래 좌표에서 조건문 숫자를 1부터 순차적으로 올려보시면 작동 방법을 유추해보실 수 있을 겁니다.
https://codepen.io/sinbi/pen/QWEEWKG
10까지는 이해가 되는데 그 이후 9~1 순서로 왜 내려가는지를 모르겠네요
제 생각엔 함수가 맨앞과 맨뒤를 시작으로 해서 점차적으로 안쪽으로 작동하도록 아마도 JS로직이 그렇게 되어 있는게 아닐까 싶네요. 저걸 왜 그러냐고 궁금해하면..... 으음.....
1+1=2 가 왜 2가 되냔 물음과 같은 시작점이 되지 않을까 싶습니다.

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

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

답변을 작성하려면 로그인이 필요합니다.