Document
<script type="text/javascript"> window.onload=function(){ function show() { var date = new Date(); var hour = date.getHours(); var minutes = date.getMinutes(); var seconds = date.getSeconds(); var text = "现在是北京时间:"+hour+":"+minutes+":"+seconds+"!!"; document.getElementById("stime").innerHTML=text; } setInterval("show()",1000); } </script>
function show 运行完后,就不存在了
就不能把function show的定义拿到外面么?
非要写些怪异嵌套的东西,把自己搞晕
试试:
setInterval(show,1000);
onload才执行的显然不对,把onload去掉就可以了
setInterval(function(){ show(); },1000); //or // setInterval(show, 1000);
解决方法
window.show = function () { var date = new Date(); var hour = date.getHours(); var minutes = date.getMinutes(); var seconds = date.getSeconds(); var text = "现在是北京时间:" + hour + ":" + minutes + ":" + seconds + "!!"; document.getElementById("stime").innerHTML = text; } setInterval("show()", 1000);
因为当调用setInterval时传递字符串函数,它会从全局作用域window里查找相关函数,但你的函数定义在onload方法,访问不到,因此不管用。
setInterval两种方式(请参考MDN)
1.setInterval(func,delay[p,p2..])
2.setInterval(code,delay)(您现在使用的是这种方式)
一般情况下,都是使用第一种。不建议使用第二种。
因为第二种执行时会使用到eval。
像@S.K.Park说的这样,eval会从全局域window中查找。
所以,你写的那个程序时执行不下去的。会报ReferenceError错误。
如果你执意要使用第二种方式,那么,请把你的show方法挂载到全局变量上面。