最新寫程式碼中時,看到專案中有人用到了 setTimeout(fun,0),於是想總結一下。個人理解,如果有錯誤的地方也請指出。 THX
要想理解JavaScript的計時器是如何運作的,先要明白 JavaScript 引擎是單執行緒的。這個可以理解為 javascript 引擎是一個服務員,它有一個服務的隊列,所有的界面元素事件,定時觸發器回調,異步請求回調都要在這個任務隊列裡排隊,等待處理。所有任務都是一個最小單位,不會中斷處理。這樣就可以理解setTimeout(fun,0) 了,它並不是代表立即執行該程式碼,除非任務隊列為空(事實上,各個瀏覽器在實際執行這個的時候也是有差異了,比較新的瀏覽器實際可能是在4ms;老版本的可能更長一點,16ms也是可能的)。而 setTimeout(fun,time) 的意思就是多少時間後將 fun 回呼加到這個任務佇列中,也就是至少需要time時間才會執行fun。
舉例:
setTimeout(function () { console.log(1); }, 0); var tem = 0; for (var i = 1; i < 1000000; i++) { tem += i; }; console.log(2);
顯示結果為
2
1
就是說,在執行setTimeout 時,將function 回調加入了任務隊列,但並沒有立即執行,因為js引擎還在忙著處理當前的js,而只在這段代碼段執行完才去任務列表裡取新的任務,所以結果就是先顯示2 後再顯示1。
setInterval(fun, time)方法是,每隔一定時間將fun加入到佇列中,那麼問題來,如果fun執行時間比 time 要長的時候怎麼辦?
看一段程式碼
var num = 0; var time = setInterval(function () { var tem = 0; for (var i = 1; i < 99999999; i++) { tem += i; }; num ++; console.log(num); }, 100); setTimeout(function (){ clearInterval(time); }, 1000);
意思是每隔100ms執行一段程式碼,在1s中後清除這個計時器。但是結果呢?
顯示結果為
1
2
3
也就是說,事實上,並沒有執行到那麼多次數。也就是說某些間隔會被跳過,這也就存在多個程式碼執行的間隔可能會比預期的小。原來在將定時器程式碼加入佇列的時候,如果該定時器的程式碼實例存在時,該次定時器程式碼會被跳過。
引用一張圖片,就很好理解了。
以上所述就是本文的全部內容了,希望大家能夠喜歡。

settimeout和setInterval的区别:1、触发时间,settimeout是一次性的,它在设定延迟时间之后执行一次函数,而setinterval是重复性的,它会以设定的时间间隔重复执行函数;2、执行次数,settimeout只执行一次,而setinterval会一直重复执行,直到被取消。

如何使用setInterval函数定时执行代码?在JavaScript中,setInterval函数是一个非常有用的函数,它可以定时执行一段代码。通过setInterval函数,我们可以在特定的时间间隔内重复执行指定的代码。本文将详细介绍如何使用setInterval函数,并提供具体的代码示例。一、setInterval函数的基本语法如下:setInterv

Window.setInterval() 方法的基本语法是“window.setInterval(function, delay)”,function是要重复执行的函数或代码块,delay是每次执行之间的时间间隔,以毫秒为单位。该方法是JavaScript中用于定时重复执行指定函数或代码的方法,它的使用非常简单,只需要传入要执行的函数或代码块以及重复执行的时间间隔。

可以使用clearInterval函数来停止由setInterval函数创建的定时器。setInterval函数会返回一个唯一的定时器ID,可以将该ID作为参数传递给clearInterval函数,以停止定时器的执行。

setinterval用法是“setInterval(function, delay);”,“function”是要执行的函数,可以是函数表达式或函数引用,“delay”是执行函数之间的时间间隔,以毫秒为单位。setInterval是JavaScript中用于周期性执行代码的函数,它接受一个函数和一个时间间隔作为参数,会按照指定的时间间隔重复执行函数。

setInterval函数是JavaScript中的一个定时器函数,允许你设置一个间隔,并在每个间隔之后执行指定的代码,需要定期处理某些任务或实时更新页面元素的情况非常有用,要注意使用setInterval时的性能和可靠性问题,并根据需要进行优化。

setTimeout(function,duration)-该函数在duration毫秒后调用函数。这适用于一次执行。让我们看一个例子-它等待2000毫秒,然后运行回调函数alert(‘Hello’)-setTimeout(function(){alert('Hello');},2000);setInterval(function,uration)-此函数在每duration毫秒后调用function。这可以无限次进行。让我们看一个例子-它每2000毫秒触发一次警

在JavaScript中使用clearTimeout函数取消setTimeout的计时器,需要具体代码示例在JavaScript中,setTimeout函数是用来在指定的时间延迟后执行一次特定的代码。而setInterval函数则是用来在指定的时间间隔内重复执行一段特定的代码。然而,在某些情况下,我们可能需要在定时器执行之前取消它。在这种情况下,就可以使用c


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),