国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

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

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

[[347708]]

 來源 | hashnode.com/@ganeshjaiwal

譯者 | 鬼哥

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

嗯...

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

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

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

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

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

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

那么什么是JavaScript引擎?

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

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

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

這是一些JS引擎示例。

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

這是JavaScript引擎的非?;镜囊晥D。

內存堆

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

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

那么什么是內存泄漏?

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

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

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

執行上下文棧

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

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

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

JavaScript引擎執行此堆棧頂部的功能。

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

您一定聽說過堆棧溢出。

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

考慮以下示例。

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

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

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

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

這是Web API的和回調隊列。

Web API

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

例子:-

  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秒后執行。

幕后到底發生了什么?

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

回調隊列

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

事件循環

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

回調隊列

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

事件循環

“隊列,請給我回調,ECS現在為空,我將它們壓入堆棧以執行它們。”

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

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

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

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

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

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

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

 

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

2021-03-09 14:04:01

JavaScriptCookie數據

2023-09-06 14:57:46

JavaScript編程語言

2021-05-18 08:30:42

JavaScript 前端JavaScript時

2023-07-30 15:18:54

JavaScript屬性

2024-04-19 14:23:52

SwitchJavaScript開發

2021-01-26 23:46:32

JavaScript數據結構前端

2021-06-24 09:05:08

JavaScript日期前端

2024-01-30 13:47:45

2021-03-05 18:04:15

JavaScript循環代碼

2021-02-02 18:39:05

JavaScript

2021-06-04 09:56:01

JavaScript 前端switch

2020-11-10 10:48:10

JavaScript屬性對象

2021-01-29 18:41:16

JavaScript函數語法

2018-10-22 12:50:20

CDN網絡內容發布網絡

2022-05-25 08:31:31

ArthasInstrument

2021-10-15 07:57:04

Docker 日志容器

2018-11-21 08:00:05

Dubbo分布式系統

2015-07-29 14:10:01

互聯網運作模式

2020-10-20 15:37:48

了解JavaScrip

2021-03-23 10:01:41

JavaScript事件監聽開發技術
點贊
收藏

51CTO技術棧公眾號

99久久精品免费看国产小宝寻花| 久久久综合视频| 懂色aⅴ精品一区二区三区| 国产真实久久| 偷拍亚洲欧洲综合| 国产精品高清网站| 国内精品久久久久影院优 | 欧美极品第一页| www.激情小说.com| 香蕉视频一区| 亚洲激情一二三区| 亚洲字幕一区二区| 久久黄色美女电影| 韩国成人福利片在线播放| 亚洲大胆人体在线| 一本一本a久久| 国产精品久久久久77777丨| 国产成人av福利| 欧美激情视频三区| 成人c视频免费高清在线观看| 国内精品视频在线观看| 天天综合网 天天综合色| 亚洲国产高清av| 91亚洲国产成人精品一区二区三| 98精品在线视频| 宅男宅女性影片资源在线1| 悠悠资源网久久精品| 精品视频在线播放色网色视频| 国产曰肥老太婆无遮挡| 91精品啪在线观看国产手机| 蜜桃av综合| 中文精品99久久国产香蕉| 999精品视频在线| 欧美成人国产| 亚洲精品第一页| av污在线观看| 国产精品欧美极品| 91丨九色丨国产| 国产高清自产拍av在线| 久久午夜电影网| 亚洲综合精品伊人久久| 99久久亚洲精品| 亚洲精品电影久久久| 日韩伦理在线一区| 一区二区在线观看免费视频播放| 理论片鲁丝二区爱情网| 石原莉奈在线亚洲二区| 精品综合久久久久久97| 精华区一区二区三区| 成人黄色小视频在线观看| 国产精品看片资源| 涩涩视频在线播放| 中文字幕亚洲天堂| 日韩极品在线| 99免费在线视频观看| 精品午夜视频| 欧美人狂配大交3d怪物一区| 日本福利视频导航| 人人狠狠综合久久亚洲婷| 亚洲人成网站免费播放| 亚洲电影小说图| 国产婷婷色一区二区三区| 狠狠干一区二区| 亚洲一区二区免费在线观看| 国产成人一区二区三区小说 | 午夜精品久久久久影视| 国产精品久久久久久久乖乖| 亚洲欧美日韩国产综合| 国产成人艳妇aa视频在线| 9191国语精品高清在线| 久久精品99无色码中文字幕| 成人在线免费看黄| 亚洲韩国一区二区三区| 免费看毛片的网址| 亚洲国产中文字幕| 成人亚洲欧美| 日韩三级高清在线| 超碰在线94| 欧美大片一区二区| 成人午夜影视| 精品成人av一区| av电影院在线看| 热久久视久久精品18亚洲精品| 成人免费在线观看视频| 成人免费观看网址| 欧美绝顶高潮抽搐喷水合集| 国产香蕉一区二区三区在线视频| 成黄免费在线| 欧美国产日本在线| 老牛影视一区二区三区| 欧美伦理片在线观看| 亚洲激情视频网| 日韩欧美电影| 7m第一福利500精品视频| 日本美女一区二区| 含羞草久久爱69一区| 国产欧美综合在线观看第十页| 亚洲国产一二三精品无码| 亚洲福利电影| 欧美日韩亚洲第一| jizz一区二区| 男的插女的下面视频| 麻豆成人91精品二区三区| 久久久久高清| 亚洲国内自拍| 国产精品久久久久久久久久久久午夜片 | 婷婷免费在线视频| 色综合久久久久综合| 最近中文字幕2019第二页视频| 91丨porny丨户外露出| av毛片在线免费| 欧美亚一区二区| chinese偷拍一区二区三区| 97超级碰在线看视频免费在线看| 精品一区二区在线免费观看| 女人床在线观看| 粉嫩高潮美女一区二区三区 | 99这里都是精品| wwww在线观看免费视频| 国产欧美日韩综合精品二区| 欧美精品成人| 国产精品成人一区二区三区| 一区在线视频| 中日韩一区二区三区| 久久免费视频在线观看| 久久久久久久电影| 99久久这里有精品| 欧美激情在线观看视频| 成人一区二区三区视频在线观看 | 久久精品国产大片免费观看| 国产一区香蕉久久| 欧美日韩视频| 在线免费av观看| 91精品国产综合久久久蜜臀粉嫩| 性xxxxfjsxxxxx欧美| 日韩精品久久久久| 亚洲91网站| 国产欧美精品一区二区| 日韩亚洲国产欧美| 91视频 - 88av| 亚洲一区二区久久久| 国产麻豆精品95视频| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 亚洲最新在线视频| 亚洲人亚洲人色久| 91久久精品www人人做人人爽 | 日日橹狠狠爱欧美超碰| 一区二区三区成人| 黄av在线播放| 亚洲v国产v| 男人的天堂久久精品| 日韩精品一区二区三区不卡| 欧美日韩激情小视频| 国产天堂在线播放视频| 中文国产成人精品久久一| 丁香婷婷综合激情五月色| 成人免费网站www网站高清| 国产91在线播放九色快色| 亚洲经典视频在线观看| www久久日com| 美国av在线播放| 九九精品视频在线| 夜夜操天天操亚洲| 国内精品嫩模av私拍在线观看| 91精品久久| 欧美 国产 综合| 国产精品亚洲第一区| 91精品国产综合久久久久久久| 国产在线观看免费一区| 中文在线视频| 久久资源av| 亚洲免费在线视频一区 二区| 日韩成人精品一区| 国产传媒在线播放| av影院在线播放| 91av视频导航| 一个色综合网| 高清av免费看| 国产亚洲欧美视频| 成人短视频软件网站大全app| 国产美女精品视频| 欧美一区二区精品| 91麻豆成人久久精品二区三区| 色777狠狠狠综合伊人| 怡红院在线播放| 天天色综合6| 亚洲国语精品自产拍在线观看| 成人18视频日本| 国产亚洲电影| 污污的网站在线免费观看| 四虎永久在线精品无码视频| 国产人妖伪娘一区91| 亚洲摸下面视频| 老**午夜毛片一区二区三区| 亚洲欧洲日韩精品在线| 青青草在线免费观看| 欧美一级视频一区二区| 91在线视频观看| 牛牛精品一区二区| 日本一区二区三区电影|