作者liu2007 (薯)
看板Ajax
标题[ js ] 用setTimeout 倒数
时间Sat Oct 20 22:14:50 2012
我是JS新手,希望各位不吝指教
我程式希望能够倒数5 4 3 2 1 0
感觉可以用setTimeout
可是程式跑的时候他没有按照时间在倒数
而是在一瞬间倒数完
下列式程式码
<html><head>
<script>
var i=5 ;
function test(){
if (i >=0){
document.write("still have "+i+" seconds."+"<br>");
i--;
setTimeout(test() , 1000);
}
}
setTimeout(test() , 1000);
</script>
</head><body>
</body></html>
请问哪里出了问题呢?
谢谢
--
If a child on the street who has nothing is willing to share,
why are we who have everything still so greedy?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 106.1.105.148
1F:推 kerash:test() 用双引号包 10/20 22:21
2F:推 s25g5d4:直接去掉()就可以了 setTimeout(test, 1000); 10/20 22:23
3F:→ nenpow:改成 setTimeout(test, 1000); 10/20 22:24
4F:→ s25g5d4:第一个参数可以传入function物件 你加上括号会造成他直接 10/20 22:24
5F:→ s25g5d4:执行该function 10/20 22:24
原来如此,那我想请问一下两个问题:
1.为什麽setTimeout执行函数允许两种写法?
setTimeout(test, 1000);
setTimeout("test()", 1000);
还有我看网路上有人说第一个参数一定要加分号
setTimeout("test();", 1000);
两种写法都能跑
请问这里又是怎麽回事@.@?
2.这个程式跑的时候
5秒 -> 4秒 的时候会覆盖
可是接下来却不会覆盖
请问是为什麽呢??
感谢
※ 编辑: liu2007 来自: 106.1.105.148 (10/20 22:52)
6F:推 s25g5d4:一个是传物件进去 一个是类似eval()的作法 10/20 23:02
7F:→ s25g5d4:Mozilla Developer Network建议使用传入物件法 不使用字串 10/20 23:03
8F:→ s25g5d4:的原因同eval() 10/20 23:03
10F:→ No:不动是因为document.write()呼叫时,页面已经读取完成 10/21 02:30
11F:→ No:你原本的网页已经被它覆盖了 10/21 02:31
12F:→ No:程式也被盖掉了,所以就变成NPC,毫无反应 10/21 02:31