settimeout和setinterval區別
setTimeout(表達式,時間) => 是指延遲指定時間后才調用函數,調用次數僅一次;
setInterval(表達式,時間) => 是指每隔指定的時間就指定表達式,次數不為一,好比設置時間為四秒,每隔四秒就執行眨眼這個操作,循環操作下去;
業務場景的區別
·setTimeout用於延遲執行某方法或功能。
·setInterval則一般用於刷新表單,對於一些表單的假實時指定時間刷新同步。
注:
setInterval() 方法會不停地調用函數,直到 clearInterval() 被調用或窗口被關閉。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的參數。
實例演示
<script> setTimeout("alert('主人, 三秒鍾已到了')", 3000 ) </script>
打開上面代碼網頁,三秒后就會出現一個 alert 對話盒,提示“主人, 三秒鍾已到了”
setInterval()實例演示
<script> setInterval("showTime()", 5000); function showTime() { var today = new Date(); alert("The time is: " + today.toString()); } </script>
注:
盡量不要用setInterval()
原因如下:
(1)setInterval()無視代碼錯誤
setInterval有個討厭的習慣,即對自己調用的代碼是否報錯這件事漠不關心。換句話說,如果setInterval執行的代碼由於某種原因出了錯,它還會持續不斷(不管不顧)地調用該代碼。
(2)setInterval無視網絡延遲
假設你每隔一段時間就通過Ajax輪詢一次服務器,看看有沒有新數據(注意:如果你真的這么做了,那恐怕你做錯了;建議使用“補償性輪詢”(backoff polling))。而由於某些原因(服務器過載、臨時斷網、流量劇增、用戶帶寬受限,等等),你的請求要花的時間遠比你想象的要長。但setInterval不在乎。它仍然會按定時持續不斷地觸發請求,最終你的客戶端網絡隊列會塞滿Ajax調用。
(3)setInterval不保證執行
與setTimeout不同,你並不能保證到了時間間隔,代碼就准能執行。如果你調用的函數需要花很長時間才能完成,那某些調用會被直接忽略。