JS中的同步與非同步

2021-09-27 12:05:43 字數 1105 閱讀 9383

一、js中同步非同步程式設計

瀏覽器是多執行緒,js是單執行緒的(瀏覽器只分配乙個執行緒來執行js)

程序大執行緒小:乙個程序中包含多個執行緒,例如在瀏覽器中開啟乙個html頁面就占用了乙個程序,載入頁面的時候,瀏覽器分配乙個執行緒去計算dom樹,分配其他的執行緒去載入 對應的資源檔案。。。在分配乙個執行緒去自上而下執行js

非同步:在主棧中執行乙個任務,但是發現這個任務是乙個非同步的操作,我們會把它移除主棧,放到等待任務佇列中(此時瀏覽器會分配其他執行緒監聽非同步任務是否到達指定的執行時間),如果主棧執行完成,監聽者會把到達時間的非同步任務重新放到主棧中執行。。。

​ [巨集任務:macro task]

定時器 【巨集任務】繫結

/*放到等待區之前狀態為1*/

xhr.onreadystatechange = () => ;

//輸出為 2 3 4

函式

- node中fs可以進行非同步的i/o操作

[微任務:micro task]

- promise(async/await) => promise並不是完全的同步,當在excutor中執行resolve或者reject的時候,此時是非同步操作,會先執行then/catch等,當主棧完成後,才會再去呼叫resolve/reject把存放的方法執行

1.先把aa執行,返回乙個promise例項

2.它會暫時跳出當前正在執行的函式(fn):也就是await後面的**暫時先不執行(把後面的**從主棧中移除,放到等待區域中)

3.主棧暫時空閒

4.當主棧中的其它任務完成(主棧空閒),並且aa中的promise也已經計算完成最後的結果,在把之前第二步移到等待區域的內容,重新拿回到主棧中執行

執行順序優先順序:sync【同步】 => micro 【微任務】=> macro【巨集任務】

所有js中的非同步程式設計僅僅是根據某些機制來管控任務的執行順序,不存在同時執行兩個任務這一說法

JS的同步與非同步

我們都知道js的 是同步執行的,也就是按照我們所書寫的順序一一執行,但是有3個特殊,他們屬於非同步執行 計時器 setinterval,settimeout 事件 onclick,onkeydown等 ajax 接下來我們分析比較一下同步執行的 和非同步執行的 之間的一些執行邏輯 1239 1011...

JS 同步與非同步程式設計

js是單執行緒的,js就是個傻子,腦子一根筋,做著當前的這件事情,沒有完成之前絕不會做下一件事情 同步上一件事情沒有完成,繼續處理上一件事情,只有上一件事情完成了,才會做另一件事情 js中大部分都是同步程式設計的 for var i 0 i 10000 i console.log ok 迴圈結束了 ...

js中的同步和非同步

一 單執行緒 j ascript 語言的一大特點就是單執行緒,也就是說,同乙個時間只能做一件事,需要排隊執行。如果前面的a任務會花費大量的時間,就會導致後面的b任務停止執行,知道a執行完才會執行b。如果排隊是因為計算量大,cpu忙不過來,倒也算了,但是很多時候cpu是閒著的,因為io裝置 輸入輸出裝...