我一直在研究下面的代码但是无法弄清楚为什么我的函数参数“input”在1秒后变为undefined?
以下是代码:
<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>
答案 0 :(得分:3)
您期望它是什么?您使用time_calc
在一秒钟后调用函数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也应该有效。
答案 1 :(得分:0)
尝试像这样调用你的函数。
var secs_inc = setInterval(new function(){
time_calc(20);}, 1000);
Or
function Calltime()
{
time_calc(20);
}
var secs_inc = setInterval(Calltime, 1000);