请教一个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()内部的语句是没用的,有高手能帮我解答一下吗?谢谢。
展开
 我来答
土味洋芋
2010-08-25 · 智慧城市架构师,构建未来城市
土味洋芋
采纳数:134 获赞数:1166

向TA提问 私信TA
展开全部
事实上,这是一种 “递归” 的设计思想:

递归其实就是自己调用自己,interval()是一个递归的函数,因为他每一秒种就调用自己一次,也就是第二个idt=window.setTimeout("interval();",1000);
实现的,然后给累记时间加上一秒(记时的关键)!!!

但是,函数需要首先被其他函数调用,自己内部的代码(递归代码)才能被执行。所以外部需要一个interval();

所以,第一个语句的作用是第一次调用interval(),第二个语句的作用是让interval()可以每隔一秒运行一次!去掉第一个,则函数根本不会运行,所以显示为空,去掉第二个,函数只运行一次,所以只记录了一秒。

另:你可能会问,如果是这样的话,外部只需要interval();就可以了,为什么要idt=window.setTimeout("interval();",1000);呢?

这是因为,你是按秒进行记时的。当用户访问你的网页,如果直接调用interval(),等于是用户刚进入你的网页,你就认为他已经停留了一秒钟!!!!!
liu_binq63
2010-08-25 · TA获得超过1485个赞
知道大有可为答主
回答量:1881
采纳率:0%
帮助的人:2259万
展开全部
window.setTimeout是隔一段时间之后执行指定代码一次,所以需要在函数内再次用window.setTimeout使得自己1秒钟后再次运行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-08-25
展开全部
我是楼主,原理我也明白,可是实践上有些接受不了。
事实上,如果缺少了第一个idt=window.setTimeout("interval();",1000);则input内什么也没有;
如果缺少了第二个idt=window.setTimeout("interval();",1000);则input内只有一个0小时0分1秒;
是怎样导致的这种区别呢?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式