簡單談?wù)凧avaScript的同步與異步
1.手繪一張圖說明。

2.為什么JavaScript是單線程(這里引用阮一峰老師的話)
JavaScript的單線程,與它的用途有關(guān)。
作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。
這決定了它只能是單線程,否則會帶來很復(fù)雜的同步問題。
比如,假定JavaScript同時有兩個線程,一個線程在某個DOM節(jié)點上添加內(nèi)容,另一個線程刪除了這個節(jié)點,這時瀏覽器應(yīng)該以哪個線程為準(zhǔn)?
所以,為了避免復(fù)雜性,從一誕生,JavaScript就是單線程,這已經(jīng)成了這門語言的核心特征,將來也不會改變。
為了利用多核CPU的計算能力,HTML5提出Web Worker標(biāo)準(zhǔn),允許JavaScript腳本創(chuàng)建多個線程,但是子線程完全受主線程控制,且不得操作DOM。
所以,這個新標(biāo)準(zhǔn)并沒有改變JavaScript單線程的本質(zhì)。
傳送門:JavaScript運行機制之事件循環(huán)(Event Loop)詳解
3.JavaScript的異步體現(xiàn)在哪
如一開始的圖,個人認(rèn)為左邊主線程就是同步,左邊事件隊列(消息隊列)就是異步。
當(dāng)然JavaScript中的異步有很多:
Ajax(XMLHttpRequest) Image Tag,Script Tag,iframe(原理類似) setTimeout/setInterval CSS3 Transition/Animation postMessage Web Workers Web Sockets and more…
相關(guān)文章
JavaScript SweetAlert插件實現(xiàn)超酷消息警告框
SweetAlert是一款使用純js制作的消息警告框插件.這篇文章主要介紹了JavaScript SweetAlert插件實現(xiàn)超酷消息警告框的相關(guān)資料,需要的朋友可以參考下2016-01-01
JavaScript樹形結(jié)構(gòu)數(shù)組處理之遞歸問題
這篇文章主要介紹了JavaScript樹形結(jié)構(gòu)數(shù)組處理之遞歸問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
MutationObserver監(jiān)視對DOM?樹所做更改的功能妙用
這篇文章主要為大家介紹了MutationObserver監(jiān)視對DOM?樹所做更改的功能妙用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
JavaScript call apply使用 JavaScript對象的方法綁定到DOM事件后this指向問題
JavaScript對象與DOM對象進(jìn)行綁定會遇到一個問題:如果被綁定的對象的方法中包含this關(guān)鍵字,當(dāng)事件被觸發(fā)時this指向的卻是DOM對象,而不是之前的JS對象。2011-09-09
javascript中Array()數(shù)組函數(shù)詳解
在JavaScript中數(shù)組也是比較常用的對象之一,數(shù)組是值的有序集合,本篇文章給大家分享Javascript中Array()數(shù)組函數(shù)詳解,需要的朋友可以參考下2015-08-08

