更正以前的錯誤認識:
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回調