亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

js前端面試之同步與異步問題詳解

2024-05-06 16:49:32
字體:
來源:轉載
供稿:網友

前言

我本來是打算寫一篇co源碼精讀(為啥讀co,因為它短),然鵝發現自己存在一系列基礎問題沒有搞透徹,打算寫一個js基礎系列文章,總結自己的理解(copy),希望與你在學習路上一同進步。首先問問自己當面試官問到js中的同步和異步,這個問題該怎么回答?理解一個問題無非是what-why-how

js同步和異步問題是什么-->為什么會產生異步問題-->如何解決。

一、JavaScript起源

技術的出現,和應用場景密切相關的。JavaScript誕生于1995年。當時,它的主要目的是處理以前由服務器端語言(如Perl)負責的一些輸入驗證操作。在JavaScript問世之前,必須把表單數據發送到服務器端才能確定用戶是否沒有填寫某個必填域,是否輸入了無效的值。Netscape Navigator希望通過JavaScript來解決這個問題。起初名字為livescript,但是后來Netscape(網景)與Sun公司成立了一個開發聯盟。Netscape為了搭上媒體熱炒Java的順風車,臨時把LiveScript改名為JavaScript,所以從本質上來說JavaScript和Java沒什么關系(趁熱度)。

如今,JavaScript的用途早已不再局限于簡單的數據驗證,而是具備了與瀏覽器窗口及其內容等幾乎所有方面交互的能力。今天的JavaScript已經成為一門功能全面的編程語言

總結:js最初的用途是為來實現用戶與瀏覽器的交互

二、JS為何是單線程的?

JavaScript的單線程,與它的用途有關。作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。這決定了它只能是單線程,否則會帶來很復雜的同步問題。比如,假定JavaScript同時有兩個線程,一個線程在某個DOM節點上添加內容,另一個線程刪除了這個節點,這時瀏覽器應該以哪個線程為準?

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

注:所謂單線程,是指在JS引擎中負責解釋和執行JavaScript代碼的線程只有一個。

三、計算機的同步與異步(重點)

計算機領域中的同步(Synchronous)和異步(Asynchronous)和我們生活中的同步和異步的概念是恰好相反的,感覺是翻譯要背這個鍋。生活中的同步,突出的是‘同',相同的步伐,是咱倆一起行動,比如一起去逛街吃飯飯睡覺覺。異步則是你忙你的,我忙我的,步調不致且互不干擾。難到計算機里的同步和異步不是這樣?確實不是。

計算機的同步就好比:你去外地上學人生地不熟,突然生活費不夠了;此時你決定打電話回家,通知家里轉生活費過來,可是當你撥出電話時,對方一直處于待接聽狀態(即:打不通,聯系不上),為了拿到生活費,你就不停的oncall、等待,最終可能不能及時要到生活費,導致你今天要做的事都沒有完成,而白白花掉了時間。
計算機的異步就是:在你打完電話發現沒人接聽時,猜想:對方可能在忙,暫時無法接聽電話,所以你發了一條短信(或者語音留言,亦或是其他的方式)通知對方后便忙其他要緊的事了;這時你就不需要持續不斷的撥打電話,還可以做其他事情;待一定時間后,對方看到你的留言便回復響應你,當然對方可能轉錢也可能不轉錢。但是整個一天下來,你還做了很多事情?;蛘哒f你找室友臨時借了一筆錢,又開始happy的上學時光了。

總結:計算機中的同步就是排隊等待,假如你是第一百零一個備胎,那你只能等前面的一百個爆了之后才能‘處理'你。異步就是,盡管你是第一百零一個,她還是能照顧到你的感受。

四、js單線程為什么會有'異步'問題

看完前面的鋪墊你是否會產生這些疑問,JS是單線程的,那么他是如何是實現異步操作的?AJAX異步發送和回調請求,還有setTimeout也看起來像是多線程的?不急慢慢來

  • js是同步的?

是的,單線程,那肯定只能同步(排隊)執行咯

  • js為什么需要異步?

如果JS中不存在異步,只能自上而下執行,萬一上一行解析時間很長,那么下面的代碼就會被阻塞。

對于用戶而言,阻塞就意味著"卡死",這樣就導致了很差的用戶體驗

  • js單線程又是如何實現異步的呢?

通過事件循環(event loop)實現'異步'

經典問題:

 console.log('1')setTimeout(function(){ console.log('2')},0)console.log('3') // 1,3,2

也就是說,setTimeout里的函數并沒有立即執行,而是延遲了一段時間,滿足一定條件后,才去執行的,這類代碼,我們叫異步代碼。

所以,這里我們首先知道了JS里的一種分類方式,就是將任務分為: 同步任務和異步任務

js,前端面試,同步,異步

雖然JS是單線程的但是瀏覽器的內核是多線程的,在瀏覽器的內核中不同的異步操作由不同的瀏覽器內核模塊調度執行,異步操作會將相關回調添加到任務隊列中。而不同的異步操作添加到任務隊列的時機也不同,如 onclick, setTimeout, ajax 處理的方式都不同,這些異步操作是由瀏覽器內核的 webcore 來執行的,webcore 包含上圖中的3種 webAPI,分別是 DOM Binding、network、timer模塊。

按照這種分類方式:JS的執行機制是

  • 首先判斷js代碼是同步還是異步,同步就進入主進程,異步就進入event table
  • 異步任務在event table中注冊函數,當滿足觸發條件后,被推入event queue
  • 同步任務進入主線程后一直執行,直到主線程空閑時,才會去event queue中查看是否有可執行的異步任務,如果有就推入主進程中

以上三步循環執行,這就是event loop

總結:同步可以保證順序一致,但是容易導致阻塞;異步可以解決阻塞問題,但是會改變順序性,根據不同的需要去寫你的代碼。

每周都會持續更新,您的點贊,收藏,關注三連擊是我的動力。

決定了前方的路怎么走,就不要總回頭看,peace&love。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品成人一区| 久热精品视频在线| 欧美大秀在线观看| 久久综合网hezyo| www.日本久久久久com.| 91九色视频导航| 亚洲专区国产精品| 成人高清视频观看www| 日韩av电影中文字幕| 日本高清久久天堂| 精品偷拍各种wc美女嘘嘘| 精品福利视频导航| 亚洲人精选亚洲人成在线| 国内精品在线一区| 亚洲福利精品在线| 亚洲免费影视第一页| 国模精品系列视频| 午夜精品久久久久久久99热| 久久免费少妇高潮久久精品99| 高清日韩电视剧大全免费播放在线观看| 色婷婷亚洲mv天堂mv在影片| 日韩av免费在线播放| 国产精品成人在线| 国产一级揄自揄精品视频| 日韩欧美国产骚| 国产69精品99久久久久久宅男| 欧美有码在线视频| 久久久久久久久91| 插插插亚洲综合网| 国产丝袜精品第一页| 国产91在线高潮白浆在线观看| 亚洲乱码一区av黑人高潮| 激情懂色av一区av二区av| 大胆欧美人体视频| 美日韩丰满少妇在线观看| 中文字幕亚洲无线码在线一区| 欧美又大又粗又长| 国产精品永久免费观看| 欧美大秀在线观看| 成人精品网站在线观看| 欧美精品激情在线| 久久久久久久久国产精品| 精品美女久久久久久免费| 欧美亚洲一级片| 欧美性videos高清精品| 97在线视频免费播放| 91九色单男在线观看| 亚洲欧洲国产伦综合| 欧美日韩在线看| 欧美性猛交xxxx乱大交极品| 成人免费高清完整版在线观看| 日韩欧美在线观看视频| 日韩av中文字幕在线免费观看| 日韩视频免费看| 日本精品视频网站| 久久久999精品| 狠狠做深爱婷婷久久综合一区| 亚洲成色999久久网站| 黑人巨大精品欧美一区免费视频| 亚洲欧美激情四射在线日| 欧美电影在线观看高清| 在线电影欧美日韩一区二区私密| 精品亚洲一区二区三区在线观看| 国产精品人成电影| 国产国语videosex另类| 亚洲精品wwwww| 久久在线免费视频| 亚洲精品一区二区三区不| 亚洲男人天堂网| 精品亚洲一区二区三区四区五区| 国产精品自产拍在线观看| 91禁外国网站| 久久黄色av网站| 国产一区二区三区在线看| 久久综合88中文色鬼| 色综合五月天导航| 毛片精品免费在线观看| 777国产偷窥盗摄精品视频| 搡老女人一区二区三区视频tv| 久久久久久国产精品久久| 2019日本中文字幕| 欧美亚洲国产视频| 欧美日韩在线视频首页| 亚洲欧美中文日韩在线v日本| 亚洲女人被黑人巨大进入| 亚洲精品福利在线观看| 亚洲日韩中文字幕| 国产专区精品视频| 久久久av一区| 欧美乱大交xxxxx另类电影| 欧美劲爆第一页| 欧美体内谢she精2性欧美| 中文字幕日韩av| 久久久久久久久久av| 欧美一级片免费在线| 青草青草久热精品视频在线网站| 国产精品爽爽爽爽爽爽在线观看| 欧美日韩亚洲天堂| 国内成人精品一区| 亚洲级视频在线观看免费1级| 欧美激情精品久久久久久黑人| 精品中文字幕在线2019| 欧美激情第6页| 亚洲片国产一区一级在线观看| 欧美日韩在线视频一区| 亚洲乱码一区av黑人高潮| 国产精品久久久久99| 国产精品免费看久久久香蕉| 成人写真福利网| 日韩精品在线观| 亚洲欧美制服另类日韩| 97精品伊人久久久大香线蕉| 国产精品盗摄久久久| 亚洲一区二区自拍| 国产精品视频男人的天堂| 精品久久久久久久久久久久久| 这里只有精品久久| 国产日韩欧美在线| 免费97视频在线精品国自产拍| 亚洲一区二区三区在线免费观看| 奇门遁甲1982国语版免费观看高清| 日韩毛片中文字幕| 日韩美女免费线视频| 国产精品一区二区三区毛片淫片| 中文日韩在线视频| 日韩三级成人av网| 欧美大片va欧美在线播放| 国产精品久久久久免费a∨| 国产精品91久久久久久| 日韩高清电影免费观看完整| 亚洲免费av电影| 亚洲人成在线观看网站高清| 日韩男女性生活视频| 国产欧美日韩免费看aⅴ视频| 欧美整片在线观看| 国产成人精品优优av| 中文字幕日韩在线观看| 欧美最猛性xxxxx亚洲精品| 97国产真实伦对白精彩视频8| 日韩成人中文字幕在线观看| 欧美激情视频在线| 91九色视频导航| 亚洲人成电影网站色| 欧美日韩成人在线播放| 亚洲人成亚洲人成在线观看| 亚洲成人精品久久久| 69国产精品成人在线播放| 中文字幕欧美日韩| 久久精品一区中文字幕| 日韩在线资源网| 久久频这里精品99香蕉| 国产在线不卡精品| 成人免费观看a| 日韩网站在线观看| 亚洲精品丝袜日韩| 成人有码在线视频| 中文字幕欧美视频在线| 成人激情视频在线| 欧美电影免费看| 国产精品激情av在线播放| 国产成人综合一区二区三区| 中文字幕精品网| 精品一区二区三区四区在线| 国产成人一区二区三区电影|