아래 코드에서 작업했지만 내 함수 매개 변수 "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>
당신은 그것이 무엇을 기대합니까? 을 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] 삭제
몇 마디 만하겠습니다