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

一篇文章深入JavaScript運作原理?

開發(fā) 前端
當將JavaScript文件加載到瀏覽器中時,JavaScript Engine會從上到下逐行執(zhí)行該文件(異步代碼將是一個例外,我們將在本系列后面的內容中看到異步代碼)。

[[347708]]

 來源 | hashnode.com/@ganeshjaiwal

譯者 | 鬼哥

您是否知道簡單的JavaScript語句需要大量工作才能完成?

嗯...

所以瀏覽器無法直接理解javascript。

那我們該如何要求瀏覽器做些什么呢?

讓我們從瀏覽器理解的語言開始。

瀏覽器僅理解0和1s語言,即二進制/位格式的語句。

我們無法輕松地將整個JavaScript轉換為位。那么,我們現(xiàn)在該怎么辦???

JavaScript引擎:- “嘿,不用擔心,我可以為您提供JavaScript文件。”

那么什么是JavaScript引擎?

當將JavaScript文件加載到瀏覽器中時,JavaScript Engine會從上到下逐行執(zhí)行該文件(異步代碼將是一個例外,我們將在本系列后面的內容中看到異步代碼)。

JavaScript引擎將逐行解析代碼并將該代碼轉換為機器代碼(二進制/位格式)。

現(xiàn)在,瀏覽器可以理解該機器代碼并相應地運行。

這是一些JS引擎示例。

那么這個javascript引擎里面是什么?

這是JavaScript引擎的非常基本的視圖。

內存堆

JavaScript引擎有時無法在編譯時分配內存,因此在運行時分配的變量將進入內存堆(內存的非結構化區(qū)域)。即使我們退出在堆中分配內存的函數(shù),我們在堆部分中分配的數(shù)據(jù)/對象仍然存在。

在這里,我們面臨一個主要的內存泄漏問題。

那么什么是內存泄漏?

內存堆的空間有限。如果我們繼續(xù)使用堆空間而不關心釋放未使用的內存。當堆中沒有更多可用內存時,這將導致內存泄漏問題。

為了解決此問題,javascript引擎引入了垃圾收集器。

什么是垃圾收集器?垃圾回收是內存管理的一種形式。就像一個收集器,它試圖釋放不再使用的對象所占用的內存。換句話說,當一個變量失去所有引用時,垃圾回收將該內存標記為“無法訪問”并釋放它。

執(zhí)行上下文棧

堆棧是遵循后進先出(LIFO)原理的數(shù)據(jù)結構(進入堆棧的最后一項將是要從堆棧中刪除的第一項)。

ECS存儲所有功能的執(zhí)行上下文。執(zhí)行上下文定義為存儲局部變量,函數(shù)和對象的對象。

簡而言之,每個功能都被推到袋子的頂部。

JavaScript引擎執(zhí)行此堆棧頂部的功能。

由于JavaScript引擎只有一個ECS,因此一次只能執(zhí)行一件事情,這是ECS的頂部。這就是使JavaScript單線程的原因。

您一定聽說過堆棧溢出。

這意味著什么?-ECS的空間也有限。因此,如果我們繼續(xù)在堆棧頂部添加功能。在某個時候,將沒有更多的空間來添加更多的堆棧框架。在這一點上,我們得到一個堆棧溢出錯誤。

考慮以下示例。

  1. function heyJS() { 
  2.     console.log("Hello you are awesome!!!!"); 
  3.     heyJS(); 
  4. heyJS(); 

好吧,這進入了無限遞歸,并且我們有一個堆棧溢出錯誤。

因此,正如我所提到的,JavaScript是一種簡單的線程語言,這意味著它只有一個調用堆棧廣告,因此一次只能執(zhí)行一個語句。

等等,我們也聽說過用JavaScript進行異步編程。那么,一次只允許一項任務時,該如何工作?

這是Web API的和回調隊列。

Web API

Web API不是JS引擎的一部分,而是Web瀏覽器提供的JavaScript運行時環(huán)境的一部分。JavaScript只是為我們提供了一種訪問這些API的機制。由于Web API是特定于瀏覽器的,因此它們可能因瀏覽器而異。在某些情況下,某些Web API可能存在于一個瀏覽器中,而沒有出現(xiàn)在另一瀏覽器中。

例子:-

  1. document.getElementById(); 
  2. document.addEventListerner(); 
  3. setTimeOut(); 
  4. setInterval(); 
  5. 例:- 
  6. console.log(“First!”); 
  7.  
  8. setTimeout(() => { 
  9.     console.log(“Second!”); 
  10. }, 1000 ); 
  11.  
  12. console.log(“Third!”); 
  13. /* 
  14. OutPut:-  
  15. First 
  16. Third 
  17. Second 
  18. */ 

很奇怪吧?

“第二”位于setTimeout內部,因此將在1秒后執(zhí)行。

幕后到底發(fā)生了什么?

1秒鐘后,WebAPI將得到通知,嘿,您有需要立即執(zhí)行的代碼。WebAPI “哦,這是console.log(),我需要執(zhí)行它,但是我不能直接執(zhí)行它。讓我們將其發(fā)送到Callback Queue” “嘿,這里是回調的Queue,請將其添加到列表中并執(zhí)行。”

回調隊列

回調隊列或消息隊列是遵循先進先出原則的隊列數(shù)據(jù)結構(首先插入隊列的項目將首先從隊列中刪除)。它存儲所有從事件表移至事件隊列的消息。每個消息都有一個關聯(lián)的功能。回調隊列維護消息或方法在隊列中添加的順序。

事件循環(huán)

事件循環(huán)不斷檢查執(zhí)行上下文堆棧是否為空以及事件隊列中是否有任何消息。僅當執(zhí)行上下文堆棧為空時,才會將方法從回調隊列移至ECS。

回調隊列

“嘿,事件循環(huán)請檢查ECS是否為空。我有一些需要推送到ECS中的回調”。

事件循環(huán)

“隊列,請給我回調,ECS現(xiàn)在為空,我將它們壓入堆棧以執(zhí)行它們。”

最后,最后,我們將獲得輸出。

  1. // First 
  2. // Third 
  3. // Second 

這只是JavaScript引擎工作原理的概述。

JavaScript引擎比我們今天在這里討論的方式復雜得多。

我將在以后的一些文章中嘗試更深入地了解JavaScript引擎。

在本系列的下一篇文章中,我將解釋Javascript類型,值和變量。

本文轉載自微信公眾號「前端人」,可以通過以下二維碼關注。轉載本文請聯(lián)系前端人公眾號。

 

責任編輯:武曉燕 來源: 前端人
相關推薦

2023-09-06 14:57:46

JavaScript編程語言

2021-05-18 08:30:42

JavaScript 前端JavaScript時

2021-06-24 09:05:08

JavaScript日期前端

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結構前端

2021-03-05 18:04:15

JavaScript循環(huán)代碼

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2024-04-19 14:23:52

SwitchJavaScript開發(fā)

2023-07-30 15:18:54

JavaScript屬性

2024-01-30 13:47:45

2020-11-10 10:48:10

JavaScript屬性對象

2021-06-04 09:56:01

JavaScript 前端switch

2021-01-29 18:41:16

JavaScript函數(shù)語法

2021-02-02 18:39:05

JavaScript

2018-10-22 12:50:20

CDN網(wǎng)絡內容發(fā)布網(wǎng)絡

2022-05-25 08:31:31

ArthasInstrument

2021-10-15 07:57:04

Docker 日志容器

2018-11-21 08:00:05

Dubbo分布式系統(tǒng)

2015-07-29 14:10:01

互聯(lián)網(wǎng)運作模式

2020-10-20 15:37:48

了解JavaScrip

2020-10-22 09:08:34

JavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区在线观看视频 | 亚洲福利在线观看 | 久久91av | 在线观看免费高清av | 欧美日韩久久 | 日本在线免费看最新的电影 | wwwww在线观看| 日韩国产免费 | 在线āv视频 | 亚洲伊人精品酒店 | 欧美精品一区二区在线观看 | 国产欧美日韩精品一区二区三区 | 成人夜晚看av | 久久精品播放 | 高清免费在线 | 亚洲草草视频 | 网站国产| 成人精品 | 国产成人在线视频 | 国内精品久久影院 | 日本精品一区二区三区在线观看视频 | 亚洲va在线va天堂va狼色在线 | 91色在线| 欧美日本亚洲 | 在线观看av中文字幕 | 欧美精品黄 | 欧美午夜视频 | 亚洲一区二区三区四区av | 国产精品一区二区三区四区 | 91精品综合久久久久久五月天 | 欧产日产国产精品视频 | 少妇淫片aaaaa毛片叫床爽 | 91免费视频观看 | 国产午夜精品福利 | 中文字幕在线国产 | 美女天堂在线 | 国产精品久久久久aaaa | 国产免费麻豆视频 | 欧美日韩成人影院 | 欧美性受xxxx | 国产成都精品91一区二区三 |