作者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