不看不知道,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執行緒非同步
- 不看後悔的Vue系列Vue
- 我是如何在自學程式設計9個月後找到工作的程式設計
- JavaScript 是如何工作的:JavaScript 的記憶體模型JavaScript記憶體模型
- 最牛的debug技巧,不看後悔!
- 我不知道的JavascriptJavaScript
- Web測試轉App測試不看不知道WebAPP
- Web 測試轉 App 測試不看不知道WebAPP
- [譯] JavaScript 是如何工作的:CSS 和 JS 動畫背後的原理 + 如何優化效能JavaScriptCSSJS動畫優化
- JavaScript是如何工作的: Web推送通知的機制JavaScriptWeb
- JavaScript 是如何工作的:JavaScript 的共享傳遞和按值傳遞JavaScript
- [譯] 理解非同步 JavaScript-學習JavaScript是怎麼工作的非同步JavaScript
- JavaScript之你不知道的thisJavaScript
- 你不知道的JavaScript(二)JavaScript
- 你不知道的JavaScript(一)JavaScript
- 想換工作,但不知道啥是saas系統
- 全網最牛的debug技巧,不看後悔!
- [譯] JavaScript 是如何工作的:Web 推送通知的機制JavaScriptWeb
- Javascript是如何工作的: Engine, Runtime 和 Call Stack的概述JavaScript
- 易優eyoucms網站後臺登入地址突然是404了,不知道啥原因?網站
- 如何在後臺修改網站資料?網站後臺如何修改字型?網站
- 你所不知道的JavaScript(三)JavaScript
- 你所不知道的JavaScript 二JavaScript
- javascript幾種繼承方式;不看就out啦JavaScript繼承
- ab 是如何壓測後臺的
- JavaScript是如何工作的:使用MutationObserver跟蹤DOM的變化JavaScriptServer
- 如何在 Flutter 建立一個後臺任務Flutter
- [Abp 原始碼分析]十六、後臺作業與後臺工作者原始碼
- vue3.x幾個不看不知道的自動化載入技巧Vue
- 面試”作弊“,不看絕對會後悔!面試
- UI框架研究工作,不可不看的13個UI框架UI框架
- 《Dubbo系列一些好用的功能》不看後悔系列
- web前端培訓後的工作方向是什麼Web前端
- 細讀《你不知道的JavaScript·上卷》1-1 作用域是什麼?JavaScript
- 精讀《你不知道的 javascript(上卷)》JavaScript
- 你不知道的javascript之繼承JavaScript繼承
- 你不知道的javascript上卷小結JavaScript