<font id="zqva1"></font>
<rt id="zqva1"></rt>
  • <tt id="zqva1"></tt>
    <cite id="zqva1"></cite>

    <cite id="zqva1"><noscript id="zqva1"></noscript></cite>
      <rp id="zqva1"><meter id="zqva1"></meter></rp>

        <cite id="zqva1"></cite>
          <b id="zqva1"></b>
          <rp id="zqva1"></rp>
          <cite id="zqva1"></cite>

          <rt id="zqva1"></rt>

        1. <rp id="zqva1"></rp>

          js中setTimeout和setInterval的深入理解:它們之間的區別,原理,“異步“等

          時間:?2017-11-16閱讀:?1733標簽:?定時器

          setTimeout和setInterval的區別

          setTimeout在執行時,是在載入后延遲指定時間后,去執行一次表達式,而setInterval則不一樣,它從載入后是每隔指定的時間就執行一次表達式。當然我們可以通過重復調用setTimeout的方法,實現類似于setInterval一樣達到周而復始的效果,下面我們就實現用setTimeout來模擬setInterval的效果:

          function interval(fn,time){  //每隔1秒讓++i
              fn();
              setTimeout(()=>{arguments.callee(fn,time);},time);//通過arguments.callee調用自身
          }
          //執行Interval函數
          var i=0
          interval(()=>{++i;console.log(i)},500); 
          //重寫Interval函數,從而起到關閉定時器的效果
          interval = null;


          setTimeout和setInterval的原理

          但是需要注意的是:無論setTimeout還是setInterval里面的函數執行并不是時間到了就執行,而是:js主進程按順序執行程序的同時,還有一個在進程空閑的時候執行的程序隊列,而定時器就相當于在多少毫秒之后把回調函數放入空閑隊列中去執行。如果空閑隊列中同時存在其它程序,定時器中的回調執行順序就不確定了。例如:

          setTimeout(()=>{console.log("我是0秒執行")},0);
          ( function(){
          	console.log("我是匿名函數中執行的")
          })();
          console.log("我在后面哦!");
          //輸出順序:我是匿名函數中執行的  我在后面哦  我是0秒執行

          看了上面的中輸出我們會發現即使定時器中設置的時間為0,它仍然是最后輸出的,由此可以看出它的時間并不是那么準確了,而是在js進程空閑的時候執行的。


          setTimeout和setInterval的“異步”

          通過上面我們已經知道,回調函數的執行是在多少時間插入空閑隊列中并按順序去執行,來達到延遲的效果,所以它的異步只是一個假象:它同樣運行在一個線程上! 因為JS始終是單線程執行的。

          那么如果在它們執行之前插入一個死循環,setTimeout和setInterval中的回調函數還會在執行嗎,例如:

          setTimeout(()=>{console.log("我還會執行嗎?")},0); 
          while(true) {};
          console.log("執行不了我了!");

          我們可以看到在控制臺中什么都不會輸出,直接是由于js是單線程,比堵塞了。而且有趣的是,你執行了這個代碼,點擊瀏覽器關閉當前頁面都沒反應了...


          這篇文章就整理到這里了,希望對你的學習有一定的幫助。

          站長推薦

          1.阿里云: 本站目前使用的是阿里云主機,安全/可靠/穩定。點擊領取2000元代金券、了解最新阿里云產品的各種優惠活動點擊進入

          2.騰訊云: 提供云服務器、云數據庫、云存儲、視頻與CDN、域名等服務。騰訊云各類產品的最新活動,優惠券領取點擊進入

          3.廣告聯盟: 整理了目前主流的廣告聯盟平臺,如果你有流量,可以作為參考選擇適合你的平臺點擊進入

          鏈接: http://www.modern-decoration.com.cn/article/detial/115

          JS中的定時器-案例解析

          倒計時定時器是在指定時間到達后觸發事件,而循環定時器就是在間隔時間到來時反復觸發事件,兩者的區別在于:前者只是作用一次,而后者則不停地作用。

          淺談JS之setTimeout與setInterval

          setTimeout與clearTimeout,以及setInterval與clearInterval均屬于Window對象方法。實例簡單描述:該實例是通過Vue實現的,具體操作要求是單擊【開始游戲】按鈕3秒鐘后執行走馬燈效果,單擊【結束游戲】按鈕停止走馬燈效果,具體代碼如下:

          JS setTimeout()基本用法

          在制作網頁動態效果時,可能會遇到需要延時在執行的需求,這時就可以用到 JS 中定時器來實現此類需求,本文將對setTimeout()做一個用法總結。

          js中如果遇到低版本安卓設備調用setTimeout不生效解決辦法

          工作中會遇到低版本安卓設備調用setTimeout不生效,既不會報錯,里面的函數也不會執行,這里po一個解決辦法,如果不執行則執行安卓自己封裝的原生的setTimeout方法:sdk.setTimeout。

          在vue組件中設置定時器和清除定時器

          由于項目中難免會碰到需要實時刷新,無論是獲取短信碼,還是在支付完成后輪詢獲取當前最新支付狀態,這時就需要用到定時器。 但是,定時器如果不及時合理地清除,會造成業務邏輯混亂甚至應用卡死的情況

          Js中setTimeout()、setInterval()、鏈式setTimeout()

          使用 setTimeout()和 setInterval()創建的定時器可以用于實現有趣且有用的功能。執行時機是不能保證的,因為在頁面的生命周期中,不同時間可能有其他代碼在控制 JavaScript 進程。在頁面下載完后的代碼運行

          JS 定時器的4種寫法及介紹

          JS提供了一些原生方法來實現延時去執行某一段代碼,下面來簡單介紹一下setTiemout、setInterval、setImmediate、requestAnimationFrame。setTimeout: 設置一個定時器,在定時器到期后執行一次函數或代碼段

          Js定時器越走越快的問題

          之前在項目中寫了定時器來做循環播放,但是總是會有越走越快的問題,開始是以為前后的HTML代碼拼接的有問題,時間緊急的情況下反復改了很多也沒什么效果,后來發現是js定時器的問題,在這里記錄一下。

          js定時器setTiemout、setInterval

          JS提供了一些原生方法來實現延時去執行某一段代碼,下面來簡單介紹一下setTiemout、setInterval、setImmediate、requestAnimationFrame。JS提供了一些原生方法來實現延時去執行某一段代碼,下面來簡單介紹一下。

          js 隨機點名

          主要是利用定時器,點擊開始IDE時候不斷的執行,并同時生成隨機數,利用數組的下標完成展示。主要用到的知識點:setInterval,Math.random()

          內容以共享、參考、研究為目的,不存在任何商業目的。其版權屬原作者所有,如有侵權或違規,請與小編聯系!情況屬實本人將予以刪除!

          文章投稿關于web前端網站點搜索站長推薦網站地圖站長QQ:522607023

          小程序專欄: 土味情話心理測試腦筋急轉彎幽默笑話段子句子語錄成語大全運營推廣

          国产精品高清视频免费 - 视频 - 在线观看 - 影视资讯 - 唯爱网