메뉴 건너뛰기

조회 수 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 몽구스 서버 외부접속 질문드립니다. 1 명품프로그래머 2017.10.26 277
362 7장에 실습문제 4번 질문 1 asd123 2017.11.05 1634
361 7장 실습문제 1번 질문 있습니다. 7 jonjsin 2017.11.09 603
360 8장 오픈챌린지 질문있습니다 1 jsch 2017.11.12 823
359 5장 실습문제 4-2질문 2 어어엉 2017.11.12 367
358 10장 오픈챌린지 testr 2017.11.19 888
357 9장 3번 질문 있습니다. 2 jonjsin 2017.11.23 380
356 520페이지 에 쿠키쓰기 질문 1 os 2017.12.09 104
355 예제 13-5 구글 위치지도 안뜨는데요? 2 rr 2017.12.09 187
354 7장 이론문제 3번 이의제기 합니다. 3 file 혁999 2017.12.10 1279
353 2-26 오디오 삽입 모바일 문의 2 한수연 2017.12.12 101
352 짝수번 정답 3 idididid 2017.12.24 3136
351 몽구스 관련 질문입니다. 1 류경선 2018.01.20 490
350 2장 예제 2-24에 관한 질문입니다. 1 최원석 2018.01.29 191
349 3장 open challenge 질문해봅니다 6 진혁 2018.01.30 1247
348 실제로 사용해봤습니다 ! ㅠㅠ 1 갱자데쓰 2018.02.06 120
347 제1장 오픈챌린지/실습문제 질문 2 file Soyoyum 2018.02.07 637
346 저자님 책 재미있게 보고있습니다.319쪽질문입니다. 2 칼잡이최제잘 2018.02.10 176
345 357쪽 예제 8-2 윗부분 2 칼잡이최제잘 2018.02.12 130
344 저자님 367페이지 질문있습니다~~ 1 file 칼잡이최제잘 2018.02.19 591
목록
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 ... 21 Next
/ 21
위로