摘要:定時器機制更正之前的錯誤認識函數內調用,函數結束。在規定的時間之后,依然會觸發的回調。首先要確認幾點單線程瀏覽器多線程單線程原因如果多線程,那么刪除或者創建元素,都需要在線程之間通信。因為瀏覽器不確定是狀態。所以,設計之初就是單線程。
js定時器機制
更正之前的錯誤認識:
1.函數內調用settimeout,函數結束。在規定的時間之后,依然會觸發settimeout的回調。
首先要確認js幾點:
1.js單線程 vs 瀏覽器多線程:
單線程原因:如果多線程,那么刪除或者創建dom元素,都需要在線程之間通信。因為瀏覽器不確定是dom狀態。所以,js設計之初就是單線程。
好處:簡單,沒有線程切換維護開銷,省內存
2.瀏覽器是多線程:
javascript引擎線程
界面渲染線程
瀏覽器事件觸發線程
Http請求線程
但是瀏覽器內核是多線程!瀏覽器內核實現允許多個線程異步執行,這些線程在內核制控下相互配合以保持同步.假如某一瀏覽器內核的實現至少有三個常駐線程:javascript引擎線程,界面渲染線程,瀏覽器事件觸發線程,除些以外,也有一些執行完就終止的線程,如Http請求線程,這些異步線程都會產生不同的異步事件,下面通過一個圖來闡明單線程的JavaScript引擎與另外那些線程是怎樣互動通信的.雖然每個瀏覽器內核實現細節不同,但這其中的調用原理都是大同小異.
定時器難點:
1.定時器實際延時時間,是無法預知的
理解js異步回調和它的單線程是如何配合工作的:
為什么settimeout會觸發回調 ajax回調 click回調
參考資料:http://www.laruence.com/2009/09/23/1089.html
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91616.html
摘要:線程機制與事件機制一進程與線程進程程序的一次執行,它占有一片獨有的內存空間。事件響應模塊負責事件的管理。當事件發生時管理模塊會將回調函數及其數據添加到回調列隊中。但是子線程完全受主線程控制,且不得操作。向另一個線程發送消息。 JavaScript線程機制與事件機制 一、進程與線程 進程(process) 程序的一次執行,它占有一片獨有的內存空間。 可以通過windows任務管理器查...
摘要:當主線程開始執行異步任務,實際就是執行對應的回調函數。異步任務必須指定回調函數。所以注意的是,只是將事件插入了任務隊列,必須等到當前代碼執行棧執行完,主線程才會去執行它指定的回調函數。 最近本人對于js的運行機制,特別是異步,還有回調函數感覺很亂,于是參考了很多有用的博客(博客原文地址會在文末給出),整理如下: js單線程 我們都知道,Javascript語言的執行環境是單線程(si...
摘要:引言學習的時候,經常聽人說,即是異步的,又是單線程的。所以我們說是異步單線程的。參考從瀏覽器多進程到單線程,運行機制最全面的一次梳理運行機制詳解再談異步機制詳解運行原理解析并發模型與事件循環 showImg(https://segmentfault.com/img/bVbo4hv?w=1800&h=1000); 引言 學習javascipt的時候,經常聽人說,javascipt即是異步...
閱讀 1575·2021-11-23 10:01
閱讀 2969·2021-11-19 09:40
閱讀 3214·2021-10-18 13:24
閱讀 3464·2019-08-29 14:20
閱讀 2980·2019-08-26 13:39
閱讀 1276·2019-08-26 11:56
閱讀 2662·2019-08-23 18:03
閱讀 373·2019-08-23 15:35