成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過可視化來學習JavaScript事件循環

開發 前端
事件循環,是每個 JavaScript 開發人員都必須要掌握的知識,開始學的時候,理解起來可能有點混亂。但我是一個視覺學習者,所以我想我會嘗試通過低分辨率 gif 以視覺方式來解釋它,以便幫助你更好的學習和理解事件循環。

事件循環,是每個 JavaScript 開發人員都必須要掌握的知識,開始學的時候,理解起來可能有點混亂。但我是一個視覺學習者,所以我想我會嘗試通過低分辨率 gif 以視覺方式來解釋它,以便幫助你更好的學習和理解事件循環。

首先,什么是事件循環,為什么要學習它?

JavaScript 是單線程的:一次只能運行一個任務。

通常你會覺得這沒什么大不了的,但是,假設您正在運行一個需要 30 秒的任務,在該任務期間,我們等待 30 秒才能發生其他任何事情(JavaScript 默認在瀏覽器的主線程上運行,所以整個 UI 都卡住了),但是,我想沒有人想要一個響應很慢有點卡頓的網站。

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

當我們調用一個函數時,它會被添加到調用堆棧中。調用堆棧是 JS 引擎的一部分,這不是特定于瀏覽器的,它是一個堆棧,這意味著它是先進后出的(想想一堆煎餅)。當一個函數返回一個值時,它會從堆棧中彈出。

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

在 Web API 中,計時器的運行時間與我們傳遞給它的第二個參數一樣長,即 1000 毫秒。回調不會立即添加到調用堆棧中,而是傳遞給稱為隊列的東西。

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

現在,我們一直在等待的部分......事件循環完成其唯一任務的時間:將隊列與調用堆棧連接!如果調用堆棧是空的,那么,如果所有先前調用的函數都返回了它們的值,并且已經從堆棧中彈出,則隊列中的第一項被添加到調用堆棧中。在這種情況下,沒有調用其他函數,這意味著當回調函數成為隊列中的第一項時,調用堆棧為空。

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

閱讀一篇文章很有趣,但你只有通過一遍又一遍地實際操作它才能完全理解學會。如果我們運行以下命令,請嘗試找出記錄到控制臺的內容:

讓我們快速看一下在瀏覽器中運行這段代碼時發生了什么:

  •  我們調用 bar。bar 返回一個 setTimeout 函數。
  •  我們傳遞給 setTimeout 的回調被添加到 Web API,setTimeout 函數和 bar 從調用堆棧中彈出。
  •  計時器運行,同時 foo 被調用并記錄First。foo 返回(未定義),baz 被調用,回調被添加到隊列中。
  •  baz日志Third。事件循環在 baz 返回后看到調用堆棧為空,之后回調被添加到調用堆棧中。
  •  回調記錄Second。

總結

以上就是我跟您分享關于事件循環的內容,希望這能讓您對學習事件循環感到輕松有趣!如果它仍然看起來令人困惑,請不要擔心,最重要的是了解某些錯誤/行為可能來自哪里,以便有效地從谷歌中搜索到正確的解決方案。

如果您覺得今天內容對您有用的話,請記得點贊我,關注我,并將它分享給您身邊的朋友,也許能夠幫助到他,最后,感謝閱讀,祝編程愉快!

責任編輯:龐桂玉 來源: web前端開發
相關推薦

2020-03-11 14:39:26

數據可視化地圖可視化地理信息

2013-02-18 11:31:00

JavaScriptPerl語言

2017-06-19 08:30:35

大數據數據可視化報表

2022-07-10 21:17:01

GitTigLinux

2020-05-08 13:44:26

Spark架構RDD

2017-10-14 13:54:26

數據可視化數據信息可視化

2022-08-26 09:15:58

Python可視化plotly

2009-04-21 14:26:41

可視化監控IT管理摩卡

2020-06-29 15:40:53

PlotlyPython數據可視化

2020-11-12 09:00:00

微服務架構工具

2017-09-15 10:23:06

可視化Bug數據分析

2018-03-26 20:07:25

深度學習

2017-01-12 17:28:59

數據分析數據可視化可視化

2018-03-26 20:04:16

深度學習

2015-08-20 10:06:36

可視化

2022-01-19 17:11:05

JavaScript數據工具

2020-09-18 16:37:59

數據可視化技術Python

2015-09-16 09:19:57

2019-03-05 09:20:47

Vim可視化模式命令

2018-03-27 22:40:59

深度學習
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品国产99国产精品 | 色噜噜狠狠色综合中国 | 久久91av | 国产精品一卡二卡三卡 | 午夜小电影 | 老司机67194精品线观看 | 日韩欧美视频 | 在线观看 亚洲 | 亚洲男人的天堂网站 | 中文字幕在线看第二 | 狠狠操网站 | 国产精品久久精品 | 黄色毛片一级 | 91福利影院 | 午夜精品久久久 | 国产日韩一区二区三免费高清 | 综合久久综合久久 | 99热这里都是精品 | 天天精品在线 | 亚洲成人高清 | 神马影院一区二区三区 | 国产精品久久毛片av大全日韩 | 午夜视频免费在线观看 | av网站免费观看 | 久久一区二区精品 | 国产精品一区网站 | 久久午夜视频 | 久久av一区二区三区 | 黄色亚洲| 国产精品久久久久久久久久久新郎 | 亚洲网站在线播放 | avtt国产 | 91久久国产精品 | 国产中文字幕网 | 久久91精品久久久久久9鸭 | 国产一区二区三区免费观看在线 | 国产探花在线观看视频 | 欧美综合一区二区三区 | 99re视频在线观看 | 91网在线播放 | 久久免费视频1 |