请看这段javascript代码如何错了,在线等,谢谢

来源:百度知道 编辑:UC知道 时间:2024/06/21 23:46:10
<body>
<script language="JavaScript">
function clock()
{ nowtime=new Date();
with(nowtime)
{
document.write("现在时间:"+getHours()+"时"+getMinutes()+"分"+getSeconds()+"秒");
}
}
setInterval('clock()',1000);
</script>
</body>请问执行结果是显示当时的时间,而不是每隔1s显示一次。setInterval('clock()',1000)不是不停执行clock函数的吗?为什么只执行一次
Gemipiggy:
如果改成
.....
setInterval('clock()',1000);<p>网页正文</p>
</script></html>
那么执行setInterval函数时网页是否就没有加载完了呢?因为后面还有<p>网页正文</p>

感谢这位朋友细心的解答。您举的那个例子我看懂了,现在我想我的问题关键在于没有理解了setInterval("clock()",1000)这个函数。请问这里应该是这样吧:当网页全部加载完之后(这点很重要),每隔1s钟执行一次clock函数。而网页加载完document就关闭了,所以write只能写入新文档了。而此时要清楚所有内容,所以就不存在再隔1秒钟再执行clock函数了。是吗?我十分感谢您的回答,希望您再次给予指导!!!

document.write()在调用的时候,它会清空document的所有内容,包括<script>里的内容。所以,在执行次clock之后,整个网页的内容全部不存在了,包括你的clock函数,因此也就无所谓调用与否了。

解决的办法是把 document.write(XXX)替换为document.body.innerText=XXX

全部内容指包括<html></html>在内的所有内容,而不仅仅是他们之间的内容。

document有两种状态:打开,关闭。
当浏览器开始渲染网页时,它会打开document;当渲染完网页后,它关闭document。

对于处于打开状态的document,执行document.write,会在当前位置执行写入。
而对于处于关闭状态的document,执行document.write,会首先执行打开document的操作——而打开操作会清空document所有的内容——然后再执行写入。

在你的前一个例子中,是在网页导入1秒钟后执行write,这个时候网页渲染已经结束,document处于关闭状态,所以,网页的内容会被清空。
而你的这个例子,执行new()的时候,网页还没渲染完毕(还没有遇到</html>),document还处于打开状态。

如果你把new作为<body>的onload就可以看到前面的内容被清空了。(<body onload="new()">....</body>)。

另外,注意new是JavaScript的关键字,不应该用来做函数名的。

下面这个例子也许能帮你理解这个概念:

<html>
<head>
<script language="JavaScript">
function w(_s)
{
document.write(_s);
}