请教一个javascript的问题,谢谢
我打算做一个计算在线停留时间的网页,上网找到一个做法,如下:<html><head><metahttp-equiv="Content-Type"content="text...
我打算做一个计算在线停留时间的网页,上网找到一个做法,如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head>
<body>
<form name=forms>
<p><font class=p2 color=red> 您在本站停留了</font> </p>
<p>
<input type=text name=input size=10>
<script language=javascript>
var second=0;
var minute=0;
var hour=0;
idt=window.setTimeout("interval();",1000);
function interval(){
second++;
if(second==60){second=0;minute+=1;}
if(minute==60){minute=0;hour+=1;}
document.forms.input.value=hour+"时"+minute+"分"+second+"秒";
idt=window.setTimeout("interval();",1000);
}
</script>
</p>
</form>
</body>
</html>
当然,这个做法非常好,只是我不明白,idt=window.setTimeout("interval();",1000);这一句先后用了两次,而且我试过了,缺一不可,但我觉得后面那一个在interval()内部的语句是没用的,有高手能帮我解答一下吗?谢谢。 展开
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>新建网页 1</title>
</head>
<body>
<form name=forms>
<p><font class=p2 color=red> 您在本站停留了</font> </p>
<p>
<input type=text name=input size=10>
<script language=javascript>
var second=0;
var minute=0;
var hour=0;
idt=window.setTimeout("interval();",1000);
function interval(){
second++;
if(second==60){second=0;minute+=1;}
if(minute==60){minute=0;hour+=1;}
document.forms.input.value=hour+"时"+minute+"分"+second+"秒";
idt=window.setTimeout("interval();",1000);
}
</script>
</p>
</form>
</body>
</html>
当然,这个做法非常好,只是我不明白,idt=window.setTimeout("interval();",1000);这一句先后用了两次,而且我试过了,缺一不可,但我觉得后面那一个在interval()内部的语句是没用的,有高手能帮我解答一下吗?谢谢。 展开
3个回答
展开全部
事实上,这是一种 “递归” 的设计思想:
递归其实就是自己调用自己,interval()是一个递归的函数,因为他每一秒种就调用自己一次,也就是第二个idt=window.setTimeout("interval();",1000);
实现的,然后给累记时间加上一秒(记时的关键)!!!
但是,函数需要首先被其他函数调用,自己内部的代码(递归代码)才能被执行。所以外部需要一个interval();
所以,第一个语句的作用是第一次调用interval(),第二个语句的作用是让interval()可以每隔一秒运行一次!去掉第一个,则函数根本不会运行,所以显示为空,去掉第二个,函数只运行一次,所以只记录了一秒。
另:你可能会问,如果是这样的话,外部只需要interval();就可以了,为什么要idt=window.setTimeout("interval();",1000);呢?
这是因为,你是按秒进行记时的。当用户访问你的网页,如果直接调用interval(),等于是用户刚进入你的网页,你就认为他已经停留了一秒钟!!!!!
递归其实就是自己调用自己,interval()是一个递归的函数,因为他每一秒种就调用自己一次,也就是第二个idt=window.setTimeout("interval();",1000);
实现的,然后给累记时间加上一秒(记时的关键)!!!
但是,函数需要首先被其他函数调用,自己内部的代码(递归代码)才能被执行。所以外部需要一个interval();
所以,第一个语句的作用是第一次调用interval(),第二个语句的作用是让interval()可以每隔一秒运行一次!去掉第一个,则函数根本不会运行,所以显示为空,去掉第二个,函数只运行一次,所以只记录了一秒。
另:你可能会问,如果是这样的话,外部只需要interval();就可以了,为什么要idt=window.setTimeout("interval();",1000);呢?
这是因为,你是按秒进行记时的。当用户访问你的网页,如果直接调用interval(),等于是用户刚进入你的网页,你就认为他已经停留了一秒钟!!!!!
展开全部
window.setTimeout是隔一段时间之后执行指定代码一次,所以需要在函数内再次用window.setTimeout使得自己1秒钟后再次运行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-08-25
展开全部
我是楼主,原理我也明白,可是实践上有些接受不了。
事实上,如果缺少了第一个idt=window.setTimeout("interval();",1000);则input内什么也没有;
如果缺少了第二个idt=window.setTimeout("interval();",1000);则input内只有一个0小时0分1秒;
是怎样导致的这种区别呢?
事实上,如果缺少了第一个idt=window.setTimeout("interval();",1000);则input内什么也没有;
如果缺少了第二个idt=window.setTimeout("interval();",1000);则input内只有一个0小时0分1秒;
是怎样导致的这种区别呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询