国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

淺談JavaScript中setInterval和setTimeout的使用問題

2024-05-06 16:24:15
字體:
供稿:網(wǎng)友

這篇文章主要介紹了淺談JavaScript中setInterval和setTimeout的使用問題,作者建議在任務(wù)龐大時盡量避免使用setInterval,需要的朋友可以參考下

說到setInterval,就不得不提到setTimeout,二者都是用于定時執(zhí)行某函數(shù),區(qū)別在于setTimeout 只執(zhí)行一次,而setInterval可以一直連續(xù)不斷執(zhí)行下去,典型用法如下:

 

  1. function do_sth() { console.log('Hello...'); } 
  1. setTimeout(do_sth, 2500); // 2.5 秒后,執(zhí)行 do_sth 函數(shù)(只執(zhí)行一次) 
  2. setInterval(do_sth, 3500); // 3.5 秒后,執(zhí)行 do_sth 函數(shù)(每隔 3.5 秒執(zhí)行一次,一直執(zhí)行下去) 


表面看上去,二者各有各的用途,沒什么問題。但是如果setInterval所執(zhí)行的函數(shù)是比較耗時的動作,setInterval仍然會按照原計劃安排調(diào)用那個函數(shù),而不考慮之前的任何阻塞,這樣隨著時間的推移,隊列中等待執(zhí)行的函數(shù)就會越來越多。而對于此問題解決方案仍然是采用遞歸調(diào)用setTimeout 的方法,如:

 
  1. function do_sth() { 
  2. console.log('Hello...'); // 即使這里執(zhí)行比較耗時的動作也沒問題, 
  3. // 等這里執(zhí)行完了才會再去調(diào)用 setTimeout 
  4.  
  5. setTimeout(do_sth, 2500); // 安排后續(xù)執(zhí)行 
  6.  
  7. do_sth(); // 初次執(zhí)行 

這種遞歸調(diào)用的方式,既可以達到循環(huán)執(zhí)行某函數(shù)的目的,有可以防止后續(xù)任務(wù)不斷堆積。

如果你覺得這種方式有點羅嗦,還可以再寫得精煉一些:

 

 
  1. (function() { 
  2. console.log('Hello...'); // do something here 
  3. setTimeout(arguments.callee, 2500); 
  4. })(); 

說是這么說,但是如果定時執(zhí)行的任務(wù)開銷很少,setInterval一般是沒什么問題的,但是如果任務(wù)開銷比較大,請務(wù)必使用setTimeout。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 宁海县| 赣榆县| 南漳县| 浦东新区| 五家渠市| 武宣县| 邻水| 通州区| 阿瓦提县| 密山市| 大新县| 齐河县| 甘德县| 西和县| 巴林右旗| 疏附县| 台湾省| 德清县| 象山县| 桑日县| 合川市| 新乡市| 成安县| 忻城县| 甘德县| 宁安市| 陆丰市| 嘉义县| 伊金霍洛旗| 中牟县| 灌阳县| 绥江县| 白河县| 哈密市| 治多县| 综艺| 高密市| 和田县| 黔西县| 永清县| 于都县|