91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是?事件循環event loop

發布時間:2021-09-17 13:45:08 來源:億速云 閱讀:123 作者:柒染 欄目:web開發

這篇文章給大家介紹什么是事件循環event loop,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

什么是?事件循環event loop

事件循環event loop。

一個老生常談的問題,之所以拿出來說,推薦的原因在于:

通過幾張動圖的形式,就把這個過程描述清楚了,太有趣了。

為什么需要它

JavaScript是單線程的:一次只能運行一個任務。通常,這沒什么大不了的,但是現在想象一下您正在運行一個耗時30秒的任務。在此任務中,我們等待30秒才能進行其他任何操作(默認情況下,JavaScript在瀏覽器的主線程上運行,因此整個用戶界面都被卡住了)。

這樣子的體驗是不能接受的,你不能把時間花在這么一個遲鈍的網站。

幸運的是,瀏覽器為我們提供了JavaScript引擎本身不提供的一些功能:Web API。這包括DOM  API,setTimeout,HTTP請求等。這可以幫助我們創建一些異步的,非阻塞的行為。

初次見面

當我們調用一個函數時,它會被添加到一個叫做調用棧的東西中。調用堆棧是JS引擎的一部分,這與瀏覽器無關。它是一個堆棧,意味著它是先入后出的(想想一堆薄餅)。當一個函數返回一個值時,它被從堆棧中彈出。

什么是?事件循環event loop

流程圖1

響應函數返回一個setTimeout函數。setTimeout是由Web  API提供給我們的:它讓我們在不阻塞主線程的情況下延遲任務。我們傳遞給setTimeout函數的回調函數,箭頭函數()=> { return 'Hey'  }被添加到Web API中。同時,setTimeout函數和response函數被從堆棧中彈出,它們都返回了它們的值!

什么是?事件循環event loop

流程圖2

在Web  API中,定時器的運行時間與我們傳遞給它的第二個參數一樣長,即1000ms。回調并不立即被添加到調用棧中,而是被傳遞到一個叫做隊列的東西中。

什么是?事件循環event loop

流程圖3

這可能是一個令人困惑的部分:這并不意味著回調函數在1000ms后被添加到callstack(從而返回一個值)!它只是在1000ms后被添加到隊列中。但這是一個隊列,該函數必須等待輪到它!

揭開面紗

現在是我們一直在等待的部分,是時候讓事件循環完成它唯一的任務了:將隊列和調用棧連接起來。如果調用棧是空的,那么如果所有先前調用的函數都已經返回了它們的值,并且已經從棧中彈出,那么隊列中的第一個項目就會被添加到調用棧中。在這種情況下,沒有其他函數被調用,也就是說,當回調函數成為隊列中的第一項時,調用棧是空的。

什么是?事件循環event loop

流程圖4

回調被添加到調用堆棧,被調用,并返回一個值,然后被從堆棧中彈出,如圖:

什么是?事件循環event loop

流程圖5

跑個demo

其實我看完這些動圖后,是很能理解作者思路滴,不過,我還是建議初學者,可以跑個例子看看,下面是一個不錯的例子:

const foo = () => console.log("First"); const bar = () => setTimeout(() => console.log("Second"), 500); const baz = () => console.log("Third");  bar(); foo(); baz();

雖然看起來很簡單,嗯,可以嘗試搞一下:

打開我們的瀏覽器,跑一下上面的代碼,讓我們快速看一下在瀏覽器中運行此代碼時發生的情況:

什么是?事件循環event loop

關于什么是事件循環event loop就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

改则县| 偏关县| 台安县| 孙吴县| 通榆县| 霍州市| 南充市| 高阳县| 衢州市| 上高县| 揭阳市| 昌吉市| 河北区| 保德县| 抚顺县| 柳河县| 五大连池市| 确山县| 鄄城县| 方正县| 怀宁县| 东海县| 吴桥县| 麟游县| 定陶县| 邯郸县| 勐海县| 镇平县| 新晃| 古蔺县| 衡山县| 大港区| 清新县| 西盟| 怀宁县| 黄陵县| 长海县| 河源市| 钟山县| 德格县| 扎囊县|