JS非同步和單執行緒舉例

2021-10-04 23:51:46 字數 468 閱讀 1508

js 需要非同步的根本原因是 js 是單執行緒運⾏的,即在同⼀時間只能做⼀件事,不能「⼀⼼⼆⽤」。

⼀個 ajax 請求由於⽹絡⽐較慢,請求需要 5 秒鐘。如果是同步,這 5 秒鐘⻚⾯就卡死在這⾥啥也做不了了。非同步的話,就好很多了,5 秒等待就等待了,其他事情不耽誤做,⾄於那 5 秒鐘等待是⽹速太慢,不是因為 js 的原因。

講到單執行緒,我們來看乙個真題:

題⽬:講解下⾯**的執⾏過程和結果

var a = true;

settimeout(function(), 100)

while(a)

這是⼀個很有迷惑性的題⽬,不少⼈認為 100ms 之後,由於 a 變成了 false ,所以 while 就中⽌了,

實際上不是這樣,因為js是單執行緒的,所以進⼊ while 迴圈之後,沒有「時間」(執行緒)去跑定時器了,所以這個**跑起來是個死迴圈!

js 單執行緒 非同步

執行緒與程序 程序是系統資源分配和排程的單元。乙個執行著的程式就對應乙個程序。在windows中,每乙個開啟的執行的應用程式或後台程式,比如執行中的qq,谷歌瀏覽器,網易雲 資源管理器等都是乙個程序。乙個程序包括了執行中的程式和程式所使用到的記憶體和系統資源。比如,邊聽 邊在寫部落格,這 就是開了兩...

非同步和單執行緒

什麼是非同步 對比同步 非同步 不會有阻塞 console.log 100 settimeout function 1000 console.log 300 同步 會阻塞,需要等待確認後才會繼續執行 console.log 100 alert 200 console.log 300 前端使用非同步的...

單執行緒和非同步

非同步 async 是相對於同步 async 而言的,同步就是一件事一件事的執行。只有前乙個任務執行完畢,才能執行後乙個任務。當js解析執行時,會被引擎分為兩類任務,同步任務 synchronous 和 非同步任務 asynchronous 對於同步任務來說,會被推到執行棧按順序去執行這些任務。對於...