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(九)定時器&JSON&同步非同步/回撥函式&函式節流&call/apply前端筆記JavaScript定時器JSON非同步函式APP
- JavaScript定時器JavaScript定時器
- JavaScript 定時器JavaScript定時器
- JavaScript 非同步函式的 Promisification 處理JavaScript非同步函式
- 前端-JavaScript非同步程式設計async函式前端JavaScript非同步程式設計函式
- JavaScript6:定時器JavaScript定時器
- JavaScript非同步程式設計–Generator函式、async、awaitJavaScript非同步程式設計函式AI
- NTP時間同步伺服器(時鐘同步)工作原理介紹伺服器
- STM32 HAL 定時器代替HAL_Delay延時函式定時器函式
- JMeter定時器設定延遲與同步JMeter定時器
- 1.15 JavaScript6:定時器JavaScript定時器
- 輪播圖(JavaScript定時器)JavaScript定時器
- 【JavaScript基礎】Js的定時器(你想看的原理也在喲)JavaScriptJS定時器
- Debug: setTimeout 使用做定時器時的錯誤函式傳遞方式定時器函式
- javaScript函式JavaScript函式
- JavaScript 非同步操作原理JavaScript非同步
- JavaScript 非同步操作裡的巢狀回撥函式JavaScript非同步巢狀函式
- javascript怎麼清除所有定時器JavaScript定時器
- JavaScript 匿名函式JavaScript函式
- JavaScript function 函式JavaScriptFunction函式
- JavaScript睡眠函式JavaScript函式
- JavaScript Generator 函式JavaScript函式
- javascript函式(5)JavaScript函式
- 避免對派生的非虛擬函式進行重定義函式
- javascript-函式表示式JavaScript函式
- Javascript函式引數求值——Thunk函式JavaScript函式
- JavaScript入門③-函式(2)原理{深入}執行上下文JavaScript函式
- JavaScript函式宣告和函式表示式區別JavaScript函式
- 【JavaScript定時器小案例】常見的幾種定時器實現的案例JavaScript定時器
- JavaScript中的compose函式和pipe函式JavaScript函式
- 什麼是 JavaScript 裡的非同步操作和回撥函式JavaScript非同步函式
- python之為函式執行設定超時時間(允許函式執行的最大時間)Python函式
- ES6中的迭代器、Generator函式以及Generator函式的非同步操作函式非同步
- javascript常用函式大全JavaScript函式
- javascript函式全解JavaScript函式
- JavaScript裡的函式JavaScript函式
- JavaScript 回撥函式JavaScript函式
- JavaScript 建構函式JavaScript函式