Javascript setInterval ()- "입력"매개 변수가 정의되지 않은 것으로 변경되는 이유는 무엇입니까?

saadi123

아래 코드에서 작업했지만 내 함수 매개 변수 "input"이 1 초 후에 정의되지 않은 것으로 변경되는 이유를 알 수 없습니다.

다음은 코드입니다.

<div id="new_time"></div>
         <div id='input'></div>
         <script>
             var mins = 0;
             var hrs = 0;
             var secs = 0;
             var test = 0;

             function time_calc(input)
             {
                document.getElementById('new_time').innerHTML = secs++;
                document.getElementById('input').innerHTML = input;

                if (secs>59)
                {
                    mins += 1;
                    secs = 0;
                    if (mins>59)
                    {
                        hrs += 1;
                        mins = 0;
                    }
                }
                while (secs == input) 
                {
                    clearInterval(secs_inc);
                }
                document.getElementById('new_time').innerHTML = hrs + ":" + mins + ":" + secs;
             }

             time_calc(20);
             var secs_inc = setInterval(time_calc, 1000);


         </script>
GolezTrol

당신은 그것이 무엇을 기대합니까? time_calc사용하여 1 초 후에 함수를 호출합니다 setInterval. 그러나 그것은 논쟁없이 그렇게 불립니다. 따라서 인수 input는 값을 얻지 못하여 정의되지 않습니다.

요소에 할당하려고하면 텍스트로 번역됩니다 undefined.

이 문제를 해결하는 한 가지 방법은 함수로 래핑하는 것입니다. 익명 함수가 될 수 있습니다.

var secs_inc = setInterval(function(){timecalc(20)}, 1000);

옷을 입은 예 :

function time_calc(input) {
  document.getElementById('input').innerText = input;
}

setInterval(function(){time_calc(20)}, 3000);
<span id="input">Wait for it....</span>

를 호출 setInterval(time_calc(20), 1000)하면 실제로 함수를 호출 time_calc()하고 결과 를 setInterval에 전달합니다 .

그러나 당신은 그것을 부를 수 없습니다. 함수 자체를 setInterval에 전달해야 setInterval이 나중에 호출 할 수 있습니다. 이것이 원래 스 니펫에서 time_calc괄호없이 전달한 이유입니다 . 호출이없는 기능 일뿐입니다.

내가 한 time_calc(20)것은 인수가없는 다른 (익명) 함수로 호출을 래핑하는 것 입니다. 그리고 이제에서 호출되는 익명 래퍼 함수 setInterval이며, 차례로 인수 로 호출 time_calc 됩니다 .

그건 그렇고 익명 기능 일 필요는 없습니다. 이 경우 가장 쉬운 해결책이라고 생각하지만 @ sudhAnsu63이 답변에서 보여준 것처럼 실제 명명 된 함수를 선언하는 것도 작동해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관