JavaScript教程:設置時延

2021-01-07 CSDN技術社區

在JavaScript中,有兩種方式可以設置時延(time delay)。第一種方式很簡單,這種方法會先等待所設定的時長,然後再運行函數代碼。第二種也是一樣,只是它會重複運行函數代碼。

注意,許多瀏覽器的最小時延值在25到75毫秒之間,一些極速瀏覽器的最小時延可達3毫秒。如果設置的時延值小於瀏覽器的最小值,代碼運行的實際時延就是就是瀏覽器的最小時延值。即便設置時延值高於最小值時,其實際時延效果也絕非完美。多數瀏覽器實際運行的延時值要稍高於設定值,一般只有幾毫秒的誤差。一些瀏覽器會在間隔計時器中(interval timer)修正誤差。另外需要注意的,在同一頁面上設置過多的計時器導致瀏覽器速度變慢,甚至無響應。三或四個計時器通常是可接受的上限。

setTimeout

第一種辦法使用Window對象的setTimeout方法。這種方法設置特定毫秒值,然後運行指定代碼,代碼可以是對函數的直接引用,也可以是作為原始碼的字符串。

window.setTimeout(referenceToFunction,timeInMilliseconds);window.setTimeout('runMoreCode()',timeInMilliseconds);

如有可能,你應該使用直接的函數引用,這樣就更有效。使用字符串的話就要求瀏覽器創建新的腳本環境,以便能夠運行腳本。

如果你創建計時器,計時器後面的代碼會照常運行。在延遲設定時間後(舊線程結束),計時器會啟動新線程,setTimeout指定的代碼代碼會在新線程中運行,而其他代碼仍運行在原先的線程中。跟其他複雜的語言相比,JavaScript不提供任何方式來控制線程休眠,喚醒,或是生成。 JavaScript引擎會處理一切,新線程會在當前線程結束後執行。儘管在理論上,多線程腳本引擎可以在老線程運行的同時執行新線程,但 JavaScript引擎是一個單線程的引用程序,只允許在一個線程結束後,開啟其他線程。這一規則同樣適用於事件(Event),它會在自己的線程中運行,並可隨時觸發。它會等待當前線程結束,然後才會開啟新線程。

要給延時計時器傳遞參數,有兩個方式可選。使用字符串,不過需要確保你傳遞的參數可以用基本的數據類型表示。不要包含任何可以破壞字符串格式的字符(如引號)。如果可以,請避免使用這種方法。不過以防你需要使用這樣方法,下面提供了一個例子參考。

window.setTimeout('runMoreCode(''+someString+'','+someNumber+')',10);

直接使用函數要更方便些,因為你可以將變量作為額外的參數傳遞給setTimeout方法。除了更方便,這種辦法也接受任何類型的變量。這一要注意,這種辦法在IE中不行。對採用Mozilla Gecko引擎的瀏覽器要小心(如Firefox和Netscape 6+),因為這些瀏覽器總是會傳輸一個額外的參數給函數——毫秒誤差值(number of miliseconds error),下面這個例子使用了內聯匿名函數,其等效於使用直接的函數引用。

window.setTimeout(function (a,b) { //do something with a and b },10,someString,someObject);

傳輸給函數的變量將是函數調用時變量所保存的值。比如你有一個名為myVar的變量,其保存的數值為5。如果你調用時延函數,將變量myVar傳遞給它,然並設置1秒的延時值。然後你立即將myVar保存的數值改為7。那麼當時延函數運行時,他會運行所時延函數所引用的函數,並將數字5傳遞給所引用的函數,因為在調用時延函數時,變量myVar保存的值為數字5。

悲劇的是,IE瀏覽器不能直接給時延函數傳遞額外的參數,確保兼容性常見的辦法就是保證變量處在當前作用域中,以便時延函數直接引用。

setInterval

setInterval 方法在語法上與setTimeout()一樣。區別就是它會以同樣的時延間隔重複運行,直至取消。

window.setInterval(function (a,b) { //do something with a and b },10,someString,someObject);

清除timeout和interval計時器

你可以調用相應的clearTimeout和clearInterval方法來取消timeout和interval計時器,計時器中的代碼就不會運行。在這個例子中,interval 計時器被設置成每一秒就運行一次。而timeout計時器被設置成在3.5秒後取消interval計時器運行。

var myInterval = window.setInterval(function (a,b) { myNumber++; },1000); window.setTimeout(function (a,b) { clearInterval(myInterval); },3500);

獲取timeout對象跟獲取inteval對象的方法一樣,而且你一樣也可以使用clearTimeout取消timeout計時器。

文章出自:howtocreate

譯文出自:譯言網

相關焦點

  • JavaScript入門教程
    起源javascript前身叫做livescript,sun公司推出java,netspace公司引進java的概念,重新設計livescript,並更名javascript。發明者,布蘭登.艾克,表單驗證原先要經過伺服器,伺服器壓力大,等待時間長,js僅在客戶端就可完成。是什麼是一種腳本語言,是一種輕量級的程式語言。
  • 解決4G/LTE系統時延及降低空口時延的4種方案
    根據業務模型不同,端到端時延可分為單程時延和回程時延,其中單程時延指數據包從發射端產生經過無線網絡正確到達另外一個接收端的時延,回程時延指數據包從發射端產生到目標伺服器收到數據包並返回相應的數據包直至發射端正確接收到應答數據包的時延。   現有的移動通信主要是人與人之間的通信,隨著硬體設備的小型化和智能化,未來的移動通信更多「人與物」及「物與物」之間的高速連接應用。
  • 12 個 GitHub 上超火的 JavaScript 奇技淫巧項目,找到寫 JavaScript 的靈感!
    https://github.com/lydiahallie/javascript-questions4. JavaScript 30本教程適合初學者當作 JavaScript 語言入門教程,學完後就可以承擔實際的網頁開發工作,也適合當作日常使用的參考手冊。
  • 分享10款超酷的Javascript繪畫和畫布類庫
    gt; 資源 > 關鍵詞 > mvc最新資訊 > 正文 分享10款超酷的Javascript繪畫和畫布類庫 javascript
  • JavaScript 函數參數 | JavaScript 教程
    函數顯式參數(Parameters)與隱式參數(Arguments)在先前的教程中,我們已經學習了函數的顯式參數:functionName(parameter1, parameter2, parameter3) {  // 要執行的代碼……}函數顯式參數在函數定義時列出。函數隱式參數在函數調用時傳遞給函數真正的值。
  • 移動5G SA語音EPS FB測試時延總結
    優先排查主被叫空口是否由於覆蓋、 幹擾、切換等因素導致時延變大。4.2 語音 EPS FB 方式時延對比選某個站點進行定點測試,進行5G打5G,5G打4G進行切換, 重定向, 盲定向時延驗證( 單位ms) :
  • 為你的WordPress添加live2d看板娘教程
    樣式圖看板娘簡介看板娘就是一個卡通模型,通過代碼的部署,會在你網頁的指定位置進行顯示,你用滑鼠進行點擊會有不同地字幕,所有的一切都可以預先進行設置代碼地址請到Github搜索live2dwordpress設置教程下載後解壓代碼到你的博客網站根目錄去。(目錄位置可以自定義)然後把解壓出來的文件夾改名為:live2d 。
  • 【JavaScript 教程】標準庫—Date 對象
    5.4、set 類方法Date對象提供了一系列set*方法,用來設置實例對象的各個方面。setDate(date):設置實例對象對應的每個月的幾號(1-31),返回改變後毫秒時間戳。setFullYear(year [, month, date]):設置四位年份。
  • JavaScript JSON介紹 | JavaScript 教程
    就像在 JavaScript 中, 數組可以包含對象:"sites":[ {"name":"Runoon", "url":"www.runoon.com"}, {"name":"Google", "url":"www.google.com"}, {"name":"Taobao", "url":"www.taobao.com"
  • ASP、PHP與javascript根據時段切換CSS皮膚的代碼
    首頁 > 教程 > 關鍵詞 > php最新資訊 > 正文 ASP、PHP與javascript根據時段切換CSS皮膚的代碼
  • javascript流程語句
    小案例:輸入兩個數,然後交換這兩個數,再輸出他們交換後的結果<script type="text/javascript">var num1 = 20;var num2 = 10;var tmp =num1;num1 = num2;num2 = tmp;alert(
  • 用javascript實現select的美化
    首頁 > 教程 > 關鍵詞 > 最新資訊 > 正文 用javascript實現select的美化
  • Javascript 生成器
    在 javascript 中,如果想要使用生成器,則需要: 定義特殊的生成器函數 調用該函數創建一個生成器對象 在循環中使用該生成器對象,或直接調用其 方法 我們以下面這個簡單的程序做為起點,並執行以下每個步驟:
  • JavaScript 中 Eval 函數的前世今生,執行代碼字符串
    因此我們不能從外部訪問在 eval 中聲明的函數和變量:// 提示:本教程所有可運行的示例都默認啟用了嚴格模式 'use strict'eval("let x = 5; function f() {}");alert(typeof x); // undefined(沒有這個變量)// 函數 f 也不可從外部進行訪問
  • 《幸福工廠》怎麼設置中文 中文設置教程
    幸福工廠怎麼設置中文?
  • 《wallpaper engine》中文設置教程
    那麼wallpaper怎麼設置為中文呢?下面小編為大家帶來了wallpaper engine中文設置教程,我們一起來看看吧! wallpaper怎麼設置為中文? 1、打開wallpaper engine後,在界面中點擊齒輪狀【設置】按鈕
  • 七天學會javascript第一天javascript介紹
    javascript介紹javascript數據類型javascript運算符javascript對象javascriptDate對象javascript String對象JavaScript常用於實現一些前端效果。
  • word頁面設置之紙張大小的設置教程 - 國哥筆記
    所以小編就整理了word頁面設置的一系列教程,教程分為:word頁面設置之頁邊距的設置教程、word頁面設置之紙張大小的設置教程、word頁面設置之紙張方向和文字方向的設置教程。本篇分享的是紙張大小的設置教程,希望能幫助大家!一、使用內置紙張大小word內置了一些我們常用的紙張大小,非常簡單,我們只要選擇使用即可。word默認的紙張大小為A4 紙,大小為21釐米 × 29.7釐米,也是我們使用最多的一個紙張大小。
  • wps頁眉頁腳設置在哪 wps頁眉頁腳設置圖文教程
    wps頁眉頁腳設置在哪 wps頁眉頁腳設置圖文教程時間:2017-07-03 14:00   來源:三聯   責任編輯:沫朵 川北在線核心提示:原標題:wps頁眉頁腳設置在哪 wps頁眉頁腳設置圖文教程 wps頁眉頁腳設置在哪,wps表格中設置頁眉和頁腳的方法 打開表格。如圖: 工具菜單選擇頁面布局。
  • 《iPhone》整點報時設置教程
    整點報時是很多老年手機都自帶的功能,那麼使用的如果是蘋果手機,該如何設置蘋果手機呢?蘋果手機怎麼設置整點報時?下面小編為大家介紹一下iPhone整點報時的設置教程。蘋果手機怎麼設置整點報時?下面小編為大家介紹一下iPhone整點報時的設置教程。 蘋果手機怎麼設置整點報時? 1、首先我們打開手機屏幕的提醒事項圖標;