不看不知道,JavaScript 是如何在後臺工作的
你在 JavaScript 程式碼是如何執行之前有想過這個問題嗎?
我們都知道 JavaScript 是一種單執行緒和非阻塞的指令碼語言,那是什麼意思呢?
單執行緒
:這意味著一次只能發生一件事
非阻塞
:假設您正在執行一個函式,該函式在該任務期間需要 30 秒,我們正在等待 30 秒,然後才能發生其他任何事情!
當然,這不會發生
這意味著它不等待非同步程式碼的響應
為了更好地理解非同步 JavaScript,讓我們看一下下面的程式碼:
console.log("Hello 1"); setTimeout(function() {
console.log("Goodbye!"); }, 3000);console.log("Hello 2 ");
跟我一起想想最後的結果是什麼..
上面的程式碼發生了什麼?
JavaScript 逐行執行,但它是非阻塞語言,因此它會執行準備好的函式,並且函式需要稍後執行
所以對於非同步 JavaScript,JavaScript 在執行函式時不會等待響應,因此它首先執行“Hello 1”然後是“Hello 2”並在 3 秒後執行“再見!”
實際的 JavaScript 執行非常簡單,但它與您首先需要了解的四個概念相關聯。
- 呼叫堆疊
- 網路 API
- 回撥佇列
- 事件迴圈
呼叫棧
:
JavaScript 只有一個呼叫棧,呼叫棧是
JS 引擎的一部分,當我們執行程式碼時呼叫一個函式,它會被
新增到呼叫棧中。
如果這個函式是非同步的,比如
(timeout(setTimeOut),Ajax request, ..) 它會移動到 web APIs 。
這意味著一次只能執行一件事
Web APIs
:
這是一個非同步函式存在的地方,直到它
完成執行,完成後它簡單地被新增
到回撥佇列中
回撥佇列
:
當瀏覽器完成時間(或
它為 JS 提供的任何其他 API)時,它不會
立即將要執行的程式碼傳輸回 JavaScript。
瀏覽器
完成後,會將程式碼儲存在回撥佇列中。
它是一個
包含一些函式或程式碼的佇列,這些函式或程式碼將
在以後被回撥。
事件迴圈
:
有一個簡單的工作,它檢查主堆疊是否為空,
當它為空時,它檢查回撥佇列。
如果
佇列中有待執行的程式碼,則將它們
一一轉移到呼叫堆疊中。
程式碼執行完後離開
棧,佇列中的下一個上來,直到
佇列為空
我們可以看到第一個函式被推送到呼叫堆疊
並立即在控制檯中執行 Hi,然後非同步
函式 (setTimeOut) 從呼叫堆疊轉移到 web apis 直到
它完成執行然後移動到回撥佇列,當呼叫堆疊
為空時,事件迴圈將非同步函式轉移到堆疊
執行。
結論
我們瞭解了誰在後臺執行同步和非同步程式碼
,我們知道呼叫
堆疊、Web api、回撥佇列和事件迴圈的含義是什麼。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70019180/viewspace-2901863/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Javascript是如何工作的JavaScript
- JavaScript 如何在後臺工作:瞭解其單執行緒性質和非同步操作JavaScript執行緒非同步
- 我是如何在自學程式設計9個月後找到工作的程式設計
- 不看後悔的Vue系列Vue
- 我是如何在Stack Overflow找到工作的
- JavaScript 是如何工作的:JavaScript 的記憶體模型JavaScript記憶體模型
- ASP.NET是如何在IIS下工作的ASP.NET
- MongoDB如何在後臺建立索引MongoDB索引
- Web測試轉App測試不看不知道WebAPP
- Web 測試轉 App 測試不看不知道WebAPP
- [譯] JavaScript 是如何工作的:CSS 和 JS 動畫背後的原理 + 如何優化效能JavaScriptCSSJS動畫優化
- 你不知道的JavaScript用法 Hacker是這樣寫JS的JavaScriptJS
- 你不知道的JavaScriptJavaScript
- 我不知道的JavascriptJavaScript
- 想換工作,但不知道啥是saas系統
- 易優eyoucms網站後臺登入地址突然是404了,不知道啥原因?網站
- JavaScript是如何工作的: Web推送通知的機制JavaScriptWeb
- C#後臺呼叫前臺javascript的五種方法C#JavaScript
- 如何在後臺修改網站資料?網站後臺如何修改字型?網站
- 面試”作弊“,不看絕對會後悔!面試
- BIEE視屏整理分享,不看後悔。。。
- JavaScript 是如何工作的:JavaScript 的共享傳遞和按值傳遞JavaScript
- 透明還是不透明,是個問題 —— 《你不知道的 JavaScript》書評JavaScript
- [譯] 理解非同步 JavaScript-學習JavaScript是怎麼工作的非同步JavaScript
- 你不知道的javascript,你不知道的奧祕JavaScript
- 不看不知道:六個超大規模Hadoop部署案例Hadoop
- JavaScript之你不知道的thisJavaScript
- 你不知道的JavaScript(一)JavaScript
- 你不知道的JavaScript(二)JavaScript
- 【譯】區塊鏈是如何工作的——用JavaScript演示區塊鏈JavaScript
- 如何在 Flutter 建立一個後臺任務Flutter
- [譯] JavaScript 是如何工作的:Web 推送通知的機制JavaScriptWeb
- [Abp 原始碼分析]十六、後臺作業與後臺工作者原始碼
- javascript幾種繼承方式;不看就out啦JavaScript繼承
- vue3.x幾個不看不知道的自動化載入技巧Vue
- 你所不知道的JavaScript 二JavaScript
- 你不知道的JavaScript-原型JavaScript原型
- 你不知道的JavaScript-提升JavaScript