首頁  >  文章  >  web前端  >  簡單談談JavaScript的同步與非同步_javascript技巧

簡單談談JavaScript的同步與非同步_javascript技巧

WBOY
WBOY原創
2016-05-16 15:22:361155瀏覽

1.手繪一張圖說明。

2.為什麼JavaScript是單線(這裡引用阮一峰老師的話)

JavaScript的單線程,與它的用途有關。

作為瀏覽器腳本語言,JavaScript的主要用途是與使用者互動,以及操作DOM。

這決定了它只能是單線程,否則會帶來很複雜的同步問題。

例如,假定JavaScript同時有兩個線程,一個線程在某個DOM節點上添加內容,另一個線程刪除了這個節點,這時瀏覽器應該以哪個線程為準?

所以,為了避免複雜性,從一誕生,JavaScript就是單線程,這已經成了這門語言的核心特徵,將來也不會改變。

為了利用多核心CPU的運算能力,HTML5提出Web Worker標準,允許JavaScript腳本建立多個線程,但是子執行緒完全受主執行緒控制,且不得操作DOM。

所以,這個新標準並沒有改變JavaScript單執行緒的本質。

傳送門:JavaScript運作機制之事件循環(Event Loop)詳解

3.JavaScript的非同步體現在哪

如一開始的圖,個人認為左邊主執行緒就是同步,左邊事件佇列(訊息佇列)就是非同步。

當然JavaScript中的非同步有很多:

Ajax(XMLHttpRequest)
Image Tag,Script Tag,iframe(原理类似)
setTimeout/setInterval
CSS3 Transition/Animation
postMessage
Web Workers
Web Sockets
and more…

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn