JavaScript 定時器函式非同步原理
JavaScript當前有兩個定時器函式,setTimeout與setInterval方法。
量方法具體用法參閱如下兩篇文章:
(1).setTimeout參閱JavaScript setTimeout()詳解一章節。
(2).setInterval參閱JavaScript setInterval()一章節。
首先再來明確一下什麼非同步操作,非同步操作的有點是什麼。
所謂非同步操作就是在同一時刻可以做多件事情,而不是所有事情在同一個佇列排隊等待執行。
大家最為熟知的一個就是ajax非同步請求,當向伺服器請求資料的時候,不會堵塞其他程式碼的執行。
明晰了非同步操作的特點,那麼它的有點也不言而明,同一時刻可以做多件事情自然比同一時刻只能做一件事情要好。
如果JavaScript沒有非同步操作,那麼將會寸步難行,會被卡死。
大家都知道setTimeout與setInterval方法可以實現非同步操作,可能還有一點疑問。
首先看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼function front(){ // code } front(); setTimeout(function(){ // code },5000);
假設front方法執行需要花費4秒時間,程式碼分析如下:
(1).JavaScript是單執行緒的,這個應該沒有什麼疑問。
(2).front方法執行完畢後,再過1秒,定時器的回撥函式就會執行,這是司空見慣的操作。
(3).下面按照JavaScript是單執行緒這理論去解析程式碼,既然是單執行緒的,當front的方法執行的時候,定時器函式肯定沒有得到執行,只有當front函式執行完畢,setTimeout方法再去執行,然後5秒後執行它的回撥函式,這很明顯與事實不符。
(4).原因是這樣的,雖然JavaScript是單執行緒的,但是它的執行環境,也就是瀏覽器是多執行緒的,時間計數並不是由JavaScript現成來完成,而是由瀏覽器的某個現成完成,所以定時器函式能夠實現非同步操作。
關於非同步操作的更多內容可以參閱JavaScript 非同步操作原理一章節。
相關文章
- javascript定時器函式簡單介紹JavaScript定時器函式
- javascript 定時器工作原理JavaScript定時器
- 前端筆記之JavaScript(九)定時器&JSON&同步非同步/回撥函式&函式節流&call/apply前端筆記JavaScript定時器JSON非同步函式APP
- javascript定時器函式開始和結束程式碼例項JavaScript定時器函式
- JavaScript定時器JavaScript定時器
- JavaScript 定時器JavaScript定時器
- JavaScript定時器演示JavaScript定時器
- JavaScript 非同步函式的 Promisification 處理JavaScript非同步函式
- NTP時間同步伺服器(時鐘同步)工作原理介紹伺服器
- JavaScript6:定時器JavaScript定時器
- 前端-JavaScript非同步程式設計async函式前端JavaScript非同步程式設計函式
- JMeter定時器設定延遲與同步JMeter定時器
- Node.js使用計時器定時執行函式詳解Node.js函式
- javascript非建構函式繼承簡單介紹JavaScript函式繼承
- 輪播圖(JavaScript定時器)JavaScript定時器
- 【JavaScript基礎】Js的定時器(你想看的原理也在喲)JavaScriptJS定時器
- 細說JavaScript非同步函式發展歷程JavaScript非同步函式
- [嵌入式]定時器定時器
- JavaScript非同步程式設計–Generator函式、async、awaitJavaScript非同步程式設計函式AI
- JavaScript 非同步操作原理JavaScript非同步
- javascript怎麼清除所有定時器JavaScript定時器
- 1.15 JavaScript6:定時器JavaScript定時器
- javascript為函式設定預設引數JavaScript函式
- 通過JavaScript定義函式的注意點JavaScript函式
- socket connect 函式設定超時函式
- javaScript函式JavaScript函式
- Direct3D Draw函式 非同步呼叫原理解析3D函式非同步
- lua非全域性函式函式
- JavaScript 非同步操作裡的巢狀回撥函式JavaScript非同步巢狀函式
- javascript給函式引數設定預設值JavaScript函式
- 避免對派生的非虛擬函式進行重定義函式
- 非視窗類中使用定時器的方法 (轉)定時器
- 【JavaScript定時器小案例】常見的幾種定時器實現的案例JavaScript定時器
- C#定時器中呼叫WCF服務+自定義回撥函式C#定時器函式
- 【轉】eval()函式(javascript) - [javaScript]函式JavaScript
- 函式式JavaScript(4):函式柯里化函式JavaScript
- JavaScript Generator 函式JavaScript函式
- JavaScript 匿名函式JavaScript函式