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

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

