메뉴 건너뛰기

조회 수 67 댓글 3

구구단 출력 함수를 만드는 예제인데, 해당 예제 중에서 함수를 선언하는 부분에 궁금함이 있어 질문합니다.

function dan(n) {
        var m=parseInt(n);
        if(isNaN(m) || m<1 || m>9) {
            alert("잘못입력하셨습니다.");
            return;

에서, m이 문자열이거나 1보다 작거나 9보다 큰 경우 경고창이 뜨고, return이 사용되었습니다.

왜 return함수를 사용하였나요?

return함수를 빼고 실행해보니, 예를 들어 숫자 33을 넣었더니 경고창이 뜨지만 함수가 계속 실행되어 화면에 33단이 출력되었습니다.

따라서 return이 멈추는 기능이라는 것을 알겠는데, 왜 그렇게 쓰이는 것인가요?

질문이 두서없이 진행되었는데 양해부탁드립니다.

감사합니다.

?
  • ?
    관리자 2020.06.06 15:13
    1. 이문제는 1~9단까지 구구단을 출력하는 것입니다.
    그래서 if 문에서는 m이 문자열이거나 1보다 작거나 9보다 큰 경우 if 문 아래의 코드가 실행되지 않도록 합니다.
    return 문을 이용하여 dan 함수를 종료하고 빠져나가도록 하였지요.

    m이 숫자 33이라면 당연히 이 문제의 목적에 벗어나기 때문에 33단이 출력되지 않게 해야 하겠지요.
    뿐만 아니라 m이 숫자가 아닌 경우에도 만일 return을 하지 않는다면 이상한 결과가 출력되는 등 문제가 발생합니다.

    2. return 문은 정확히 함수를 종료하고 함수를 호출한 곳으로 돌아가라는 코드입니다. 자바스크립트 엔진이 return 문을 실행하면 dan 함수의 실행을 중단하고 dan 함수를 호출한 곳으로 돌아가서
    더 이상 코드가 없으면 그냥 자바스크립트 코드 전체의 실행이 종료되는 것입니다.
    return 문으 '멈추라는 기능'으로 해석하는 것은 부분적으로 의미가 있지만, 본질적인 의미는 아닙니다.

    3. 좀 어려운 이야기지만, 이 예제에서 dan 함수를 사용하지 않았다면 m이 문자열이거나 1보다 작거나 9보다 큰 경우 를 걸러내지 못할 것입니다.
    왜냐하면 m이 문자열이거나 1보다 작거나 9보다 큰 경우에 더 이상 실행을 중지시킬 수 있는 방법이 없기 때문입니다.

    설명이 부족하거나 더 이해가 필요하면 그때 좀 더 구체적으로 물으면 답해드리겠습니다.
  • ?
    초보 2020.06.07 14:32
    답변 3 관련해서 질문합니다.

    1. 함수dan을 만들지 않을 경우 return 함수를 사용하지 못하기 때문에 실행을 중지할 수 있는 방법이 없다는 것인가요?
    2. 만약 <body>에서 if문을 사용하고,
    if(isNaN(m) || m<1 || m>9) {
    alert("잘못입력하셨습니다.");
    break;
    와 같이 break를 사용할 수는 없는건가요?
  • ?
    관리자 2020.06.07 16:22

    1. 그렇습니다. 함수를 사용하지 않으면 중단시킬 수 없지요.

    2.  함수내에서 break;의 사용은 문법적으로 전혀 맞지 않습니다.

    break; 사용되는 곳은 2경우입니다.

    1) 다음과 같이 for, while 문의 반복에서 빠져나오는 경우이고,

    for( ) {

     ...

    break;

    ..

    }

     

    2) switch문의 case에서 switch 전체를 빠져나오는 경우

    switch(n) {

    case 1: ... break;

    ..

    }

     

    이 두 경우가 아닌 상황에서 break;를 사용하면 그것은 오류로 처리되어 프로그램의 실행이 바로 중단됩니다.

    함수 내에서 함수의 실행을 종료하고 호출한 곳으로 돌아가는 코드는 return입니다. return 자리에 break를 사용하면 문법 오류로 처리하여 자바스크립트 엔진은 

    자바스크립트 프로그램의 실행을 그냥 중단해버립니다.

     

    둘 다 이 책에 설명이 되어 있으니 읽어보세요.

     


QnA

공부하면서 궁금했던 것을 질문해보세요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 읽어주세요! 연습문제 및 실습문제 정답 공개에 관한 공지입니다. file 관리자 2017.06.20 18281
363 실습문제 7장 2번의 입력된 반대순으로 출력이 넘 힘듭니다 도움좀 주세요 제발 ㅠㅠ 도널드임 2019.05.27 1130
362 스크립트에서 document.write로 표 만들기 질문드립니다. 1 file 입문한 사람 2020.06.08 1113
361 open challenge 코드 11 hardworking 2017.03.27 1106
360 6장 실습문제 짝수 답좀 알려주실분? 제발요  도움 2017.09.18 1105
359 11장 실습문제 6번 arc()문제 제발요 2019.12.06 1093
358 07장 10번 답좀 알고싶습니다... 2 abcd 2017.06.11 1088
357 7장 오픈첼린지 1 Bolt 2017.04.11 1071
356 9장 연습문제 4번 1 초보 2020.10.16 1007
355 몽구스 질문있습니다 ㅜㅜ 3 몽구스초보입니다 2019.01.10 1003
354 오픈챌린지 9장 littlelion 2018.06.20 1002
353 실습문제 7장에 8번 질문 1 abcd 2017.05.09 994
352 한글html 1 키보드 향기 2020.03.29 922
351 [명품 html5+ css3+ javascript 웹 프로그래밍 수정판] 1장 실습문제 4번 질문합니다... 2 file 나능냐공도리 2021.04.17 920
350 4장 19번 1 .. 2018.09.28 906
349 8장 오픈챌린지 1 감자먹을래 2018.04.16 891
348 10장 오픈챌린지 testr 2017.11.19 888
347 11장 실습문제 6번 질문입니다. 1 file 메론 2018.11.29 884
346 10장 이론문제 10번 질문입니다. 3 하늘하 2019.05.15 849
345 6장 실습 8번 1 어려워 2018.12.18 839
344 연습문제 짝수답은어디있나요?? 2021.02.16 831
목록
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로