簡(jiǎn)單談?wù)凧avaScript的同步與異步
1.手繪一張圖說(shuō)明。
2.為什么JavaScript是單線程(這里引用阮一峰老師的話)
JavaScript的單線程,與它的用途有關(guān)。
作為瀏覽器腳本語(yǔ)言,JavaScript的主要用途是與用戶(hù)互動(dòng),以及操作DOM。
這決定了它只能是單線程,否則會(huì)帶來(lái)很復(fù)雜的同步問(wèn)題。
比如,假定JavaScript同時(shí)有兩個(gè)線程,一個(gè)線程在某個(gè)DOM節(jié)點(diǎn)上添加內(nèi)容,另一個(gè)線程刪除了這個(gè)節(jié)點(diǎn),這時(shí)瀏覽器應(yīng)該以哪個(gè)線程為準(zhǔn)?
所以,為了避免復(fù)雜性,從一誕生,JavaScript就是單線程,這已經(jīng)成了這門(mén)語(yǔ)言的核心特征,將來(lái)也不會(huì)改變。
為了利用多核CPU的計(jì)算能力,HTML5提出Web Worker標(biāo)準(zhǔn),允許JavaScript腳本創(chuàng)建多個(gè)線程,但是子線程完全受主線程控制,且不得操作DOM。
所以,這個(gè)新標(biāo)準(zhǔn)并沒(méi)有改變JavaScript單線程的本質(zhì)。
傳送門(mén):JavaScript運(yùn)行機(jī)制之事件循環(huán)(Event Loop)詳解
3.JavaScript的異步體現(xiàn)在哪
如一開(kāi)始的圖,個(gè)人認(rè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)文章
使用typescript類(lèi)型實(shí)現(xiàn)ThreeSum
這篇文章主要介紹了使用typescript類(lèi)型實(shí)現(xiàn)ThreeSum,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以一下,希望對(duì)你學(xué)習(xí)又是幫助2022-08-08JavaScript評(píng)論點(diǎn)贊功能的實(shí)現(xiàn)方法
通過(guò)分析評(píng)論功能的邏輯關(guān)系,學(xué)會(huì)如何使用JavaScript實(shí)現(xiàn)評(píng)論、回復(fù)、點(diǎn)贊等各種功能。這篇文章主要介紹了JavaScript評(píng)論點(diǎn)贊功能的實(shí)現(xiàn)方法,需要的朋友可以參考下2017-03-03Parcel.js + Vue 2.x 極速零配置打包體驗(yàn)教程
這篇文章主要介紹了Parcel.js + Vue 2.x 極速零配置打包體驗(yàn) 的相關(guān)資料,需要的朋友可以參考下2017-12-12詳解JS中的compose函數(shù)和pipe函數(shù)用法
這篇文章主要介紹了JS中的compose函數(shù)和pipe函數(shù)用法,想深入了解Javascript的同學(xué),可以參考下2021-04-04JavaScript鏈?zhǔn)秸{(diào)用實(shí)例淺析
這篇文章主要介紹了JavaScript鏈?zhǔn)秸{(diào)用,結(jié)合實(shí)例形式分析了javascript鏈?zhǔn)秸{(diào)用的相關(guān)原理、實(shí)現(xiàn)方法及操作注意事項(xiàng),需要的朋友可以參考下2018-12-12HTML+JS模擬實(shí)現(xiàn)QQ下拉菜單效果
這篇文章主要為大家詳細(xì)介紹了如何利用HTML+JavaScript模擬實(shí)現(xiàn)QQ中的下拉菜單效果。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下2022-05-05js+canvas實(shí)現(xiàn)繪制正方形并插入文字效果(居中顯示)
canvas是一個(gè)可以讓我們使用腳本繪圖的標(biāo)簽,它提供了一系列完整的屬性和方法,下面這篇文章主要給大家介紹了js+canvas實(shí)現(xiàn)繪制正方形并插入文字居中顯示效果的相關(guān)資料,需要的朋友可以參考下2023-11-11javascript中Date對(duì)象應(yīng)用之簡(jiǎn)易日歷實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了javascript中Date對(duì)象應(yīng)用之簡(jiǎn)易日歷實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07