js 單線程 回調

js定時器機制

更正以前的錯誤認識:
1.函數內調用settimeout,函數結束。在規定的時間以後,依然會觸發settimeout的回調。javascript

首先要確認js幾點:
1.js單線程 vs 瀏覽器多線程:html

  • 單線程緣由:若是多線程,那麼刪除或者建立dom元素,都須要在線程之間通訊。由於瀏覽器不肯定是dom狀態。因此,js設計之初就是單線程。java

  • 好處:簡單,沒有線程切換維護開銷,省內存ajax

2.瀏覽器是多線程:瀏覽器

  • javascript引擎線程多線程

  • 界面渲染線程dom

  • 瀏覽器事件觸發線程異步

  • Http請求線程函數

可是瀏覽器內核是多線程!瀏覽器內核實現容許多個線程異步執行,這些線程在內核制控下相互配合以保持同步.假如某一瀏覽器內核的實現至少有三個常駐線程:javascript引擎線程,界面渲染線程,瀏覽器事件觸發線程,除些之外,也有一些執行完就終止的線程,如Http請求線程,這些異步線程都會產生不一樣的異步事件,下面經過一個圖來闡明單線程的JavaScript引擎與另外那些線程是怎樣互動通訊的.雖然每一個瀏覽器內核實現細節不一樣,但這其中的調用原理都是大同小異.線程

定時器難點:
1.定時器實際延時時間,是沒法預知的
理解js異步回調和它的單線程是如何配合工做的:

爲何settimeout會觸發回調  ajax回調 click回調

參考資料:http://www.laruence.com/2009/09/23/1089.html

相關文章
相關標籤/搜索