亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript 對引擎、運行時、調用堆棧的概述理解

2019-11-19 12:39:02
字體:
來源:轉載
供稿:網友

 隨著JavaScript越來越流行,越來越多的團隊廣泛的把JavaScript應用到前端、后臺、hybrid 應用、嵌入式等等領域。

這篇文章旨在深入挖掘JavaScript,以及向大家解釋JavaScript是如何工作的。我們通過了解它的底層構建以及它是怎么發揮作用的,可以幫助我們寫出更好的代碼與應用。據 GitHut 統計顯示,JavaScript 長期占據GitHub中 Active Repositories 和 Total Pushes 的榜首,并且在其他的類別中也不會落后太多。

如果一個項目越來越依賴 JavaScript,這就意味著開發人員必須利用這些語言和生態系統提供更深層次的核心內容去構建一個令人振奮的應用。然而,事實證明,有很多的開發者每天都在使用 JavaScript,但是卻不知道在底層 JavaScript 是怎么運作的。

概述

幾乎每個人聽說過 V8 引擎的概念,而且,大多數人都知道 JavaScript 是單線程的,或者是它是使用回調隊列的。
在這篇文章中,我們將詳細的介紹這些概念,并解釋 JavaScript 是怎么工作的。通過了解這些細節,你就能利用這些提供的 API 來寫出更好的,非阻塞的應用來。如果你對 JavaScript 比較陌生,那么這篇文章將幫助您理解為什么 JavaScript 相較于其他語言顯得如此“怪異”。如果您是一位經驗豐富的 JavaScript 開發人員,希望它能給你帶來一些新的見解,說明 JavaScript 的運行時,盡管你可能每天都會用到它。

JavaScript 引擎

JavaScript 引擎說起來最流行的當然是谷歌的 V8 引擎了, V8 引擎使用在 Chrome 以及 Node 中,下面有個簡單的圖能說明他們的關系:

這個引擎主要由兩部分組成:

  • 內存堆:這是內存分配發生的地方
  • 調用棧:這是你的代碼執行時的地方

運行時

有些瀏覽器的 API 經常被使用到(比如說:setTimeout),但是,這些 API 卻不是引擎提供的。那么,他們是從哪兒來的呢?事實上這里面實際情況有點復雜。

所以說我們還有很多引擎之外的 API,我們把這些稱為瀏覽器提供的 Web API,比如說 DOM、AJAX、setTimeout等等。

然后我們還擁有如此流行的事件循環和回調隊列。

調用棧

JavaScript 是一門單線程的語言,這意味著它只有一個調用棧,因此,它同一時間只能做一件事。

調用棧是一種數據結構,它記錄了我們在程序中的位置。如果我們運行到一個函數,它就會將其放置到棧頂。當從這個函數返回的時候,就會將這個函數從棧頂彈出,這就是調用棧做的事情。

讓我們來看一看下面的例子:

 function multiply(x, y) { return x * y; } function printSquare(x) { var s = multiply(x, x); console.log(s); } printSquare(5);

當程序開始執行的時候,調用棧是空的,然后,步驟如下:

每一個進入調用棧的都稱為__調用幀__。

這能清楚的知道當異常發生的時候堆棧追蹤是怎么被構造的,堆棧的狀態是如何的。讓我們看一下下面的代碼:

 function foo() { throw new Error('SessionStack will help you resolve crashes :)'); } function bar() { foo(); } function start() { bar(); } start();

如果這發生在 Chrome 里(假設這段代碼實在一個名為 foo.js 的文件中),那么將會生成以下的堆棧追蹤:

"堆棧溢出",當你達到調用棧最大的大小的時候就會發生這種情況,而且這相當容易發生,特別是在你寫遞歸的時候卻沒有全方位的測試它。我們來看看下面的代碼:

 function foo() { foo(); } foo();

當我們的引擎開始執行這段代碼的時候,它從 foo 函數開始。然后這是個遞歸的函數,并且在沒有任何的終止條件的情況下開始調用自己。因此,每執行一步,就會把這個相同的函數一次又一次地添加到調用堆棧中。然后它看起來就像是這樣的:

然后,在某一時刻,調用棧中的函數調用的數量超過了調用棧的實際大小,瀏覽器決定干掉它,拋出一個錯誤,它看起來就像是這樣:

 

在單個線程上運行代碼很容易,因為你不必處理在多線程環境中出現的復雜場景――例如死鎖。但是在一個線程上運行也非常有限制。由于 JavaScript 只有一個調用堆棧,當某段代碼運行變慢時會發生什么?

并發與事件循環

調用棧中的函數調用需要大量的時間來處理,那么這會發生什么情況呢?例如,假設你想在瀏覽器中使用 JavaScript 進行一些復雜的圖片轉碼。

你可能會問?這算什么問題?事實上,問題是當調用棧有函數要執行,瀏覽器就不能做任何事,它會被堵塞住。這意味著瀏覽器不能渲染,不能運行其他的代碼,它被卡住了。如果你想在應用里讓 UI 很流暢的話,這就會產生問題。

而且這不是唯一的問題,一旦你的瀏覽器開始處理調用棧中的眾多任務,它可能會停止響應相當長一段時間。大多數瀏覽器都會這么做,報一個錯誤,詢問你是否想終止 web 頁面。

總結

以上所述是小編給大家介紹的JavaScript 對引擎、運行時、調用堆棧的概述理解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲最大av网站| 成人国产精品av| 成人精品一区二区三区| 亚洲第一精品久久忘忧草社区| 久久视频精品在线| 国产精品久久久av| 精品网站999www| 欧美性生交xxxxxdddd| 在线视频精品一| 国产啪精品视频| 福利精品视频在线| 亚洲理论在线a中文字幕| 成人免费网站在线| 久久久久久久国产精品| 日韩欧美aⅴ综合网站发布| 狠狠躁天天躁日日躁欧美| 日韩精品久久久久久久玫瑰园| 欧美精品www| 国产狼人综合免费视频| 欧美视频免费在线| 91精品国产九九九久久久亚洲| 日韩欧美亚洲一二三区| 一道本无吗dⅴd在线播放一区| 日韩专区在线播放| 有码中文亚洲精品| 欧洲亚洲在线视频| 欧美精品第一页在线播放| 国产原创欧美精品| 久久天天躁日日躁| 欧美三级欧美成人高清www| xxx成人少妇69| 欧洲成人免费视频| 国产69精品99久久久久久宅男| 丁香五六月婷婷久久激情| 91在线观看免费高清完整版在线观看| 国产精国产精品| 国产综合久久久久久| 成人国产精品一区二区| 亚洲欧洲免费视频| 久久国产精品久久精品| 久久精品视频亚洲| 成人精品福利视频| 国产97在线|日韩| 精品国产欧美一区二区三区成人| 国产精品成人一区二区| 久久久亚洲欧洲日产国码aⅴ| 日本久久久久久久| 色先锋资源久久综合5566| 岛国av一区二区在线在线观看| 亚洲天堂男人天堂女人天堂| 国产福利成人在线| 亚洲综合在线中文字幕| 日本高清视频一区| 久久免费视频这里只有精品| 91精品国产自产在线老师啪| 精品日韩视频在线观看| 中文字幕一区二区精品| 亚洲欧美日韩一区在线| 欧美成人免费在线视频| 成人h片在线播放免费网站| 国产视频欧美视频| 久久人人爽人人| 欧美日韩在线免费观看| 国产成人涩涩涩视频在线观看| 97av视频在线| 日韩av在线免费| 国产成人一区三区| 国产欧美亚洲视频| 日韩美女在线播放| 久久视频国产精品免费视频在线| 亚洲三级 欧美三级| 亚洲欧美中文日韩在线| 久久亚洲国产成人| 毛片精品免费在线观看| 欧美性猛交xxxx久久久| 91精品91久久久久久| 欧美激情一区二区久久久| 精品久久久久久久久久ntr影视| 伊人成人开心激情综合网| 欧美日韩亚洲一区二区三区| 国产综合久久久久久| 欧美在线精品免播放器视频| 国产一区二区三区日韩欧美| 欧美激情18p| 91wwwcom在线观看| 国产精品久久久久久久av大片| 亚洲精品久久久久久久久| 日韩麻豆第一页| 日本精品久久中文字幕佐佐木| 91在线观看免费高清完整版在线观看| 国产精品揄拍500视频| 精品国产一区二区三区久久狼黑人| 91在线视频成人| 国产91亚洲精品| 97人人爽人人喊人人模波多| 97视频人免费观看| 欧美一区在线直播| 欧美日韩高清在线观看| 2024亚洲男人天堂| 日本精品视频在线播放| 日韩精品视频在线| 精品国产一区二区三区四区在线观看| 精品亚洲男同gayvideo网站| 欧洲美女免费图片一区| 国产成人激情视频| 91香蕉嫩草神马影院在线观看| 国产伊人精品在线| 欧美日韩在线视频一区二区| 亚洲视频在线免费看| 国产精品视频内| 国产精品爽爽爽爽爽爽在线观看| 色一情一乱一区二区| 欧美国产精品人人做人人爱| 日韩在线观看视频免费| 日韩美女av在线| 秋霞av国产精品一区| 97视频com| 45www国产精品网站| 精品视频在线观看日韩| 久久人人爽国产| 久久久久女教师免费一区| 不卡av电影在线观看| 日韩视频永久免费观看| 国产精品久久久久久久久久新婚| 91精品国产91久久久久福利| 亚洲在线观看视频网站| 国产欧美精品日韩精品| 成人福利免费观看| 日韩电影免费观看中文字幕| 国产精品三级美女白浆呻吟| 日本久久亚洲电影| 91精品久久久久久久久青青| 亚洲欧美日韩一区在线| 国产91色在线|| 久久99精品久久久久久青青91| 亚洲欧洲xxxx| 色妞久久福利网| 国产精品夜间视频香蕉| 成人性教育视频在线观看| 国产精品入口夜色视频大尺度| 日韩成人av网址| 成人免费大片黄在线播放| 98视频在线噜噜噜国产| 成人欧美一区二区三区在线| 国产精品日韩久久久久| 91av在线免费观看视频| 国产精品精品视频| 国产精品久久久久久久久久免费| 伊人伊成久久人综合网站| 91在线免费看网站| 亚洲一区二区三区sesese| 精品露脸国产偷人在视频| 成人有码在线播放| www欧美xxxx| 欧美色xxxx| 日韩欧美成人免费视频| 日韩视频一区在线| 欧美日本啪啪无遮挡网站| 久久91亚洲精品中文字幕奶水| 亚洲国产私拍精品国模在线观看| 日韩中文有码在线视频| 亚洲精品欧美日韩| 亚洲视频一区二区三区| 国产精品h片在线播放|