国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-27 22:05:53
文檔

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

JavaScript 對引擎、運行時、調用堆棧的概述理解: 隨著JavaScript越來越流行,越來越多的團隊廣泛的把JavaScript應用到前端、后臺、hybrid 應用、嵌入式等等領域。 這篇文章旨在深入挖掘JavaScript,以及向大家解釋JavaScript是如何工作的。我們通過了解它的底層構建以及它是怎么發(fā)揮作用的,可以幫助
推薦度:
導讀JavaScript 對引擎、運行時、調用堆棧的概述理解: 隨著JavaScript越來越流行,越來越多的團隊廣泛的把JavaScript應用到前端、后臺、hybrid 應用、嵌入式等等領域。 這篇文章旨在深入挖掘JavaScript,以及向大家解釋JavaScript是如何工作的。我們通過了解它的底層構建以及它是怎么發(fā)揮作用的,可以幫助

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

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

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

概述

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

JavaScript 引擎

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

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

  • 內存堆:這是內存分配發(fā)生的地方
  • 調用棧:這是你的代碼執(zhí)行時的地方
  • 運行時

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

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

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

    調用棧

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

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

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

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

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

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

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

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

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

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

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

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

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

     

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

    并發(fā)與事件循環(huán)

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

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

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

    總結

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

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    JavaScript 對引擎、運行時、調用堆棧的概述理解: 隨著JavaScript越來越流行,越來越多的團隊廣泛的把JavaScript應用到前端、后臺、hybrid 應用、嵌入式等等領域。 這篇文章旨在深入挖掘JavaScript,以及向大家解釋JavaScript是如何工作的。我們通過了解它的底層構建以及它是怎么發(fā)揮作用的,可以幫助
    推薦度:
    標簽: js 運行 引擎
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 日本精品久久久一区二区三区 | 91成人爽a毛片一区二区 | 国产在线欧美日韩一区二区 | 亚洲国产成人精品女人久久久 | 国产免费精彩视频 | 欧美日韩在线视频 | 黄网站在线观看 | 中文字幕第七页 | 亚洲三级电影网 | 日韩在线看片 | 午夜日韩精品 | 欧美网站在线看 | 亚洲va乱码一区二区三区 | 欧美亚洲国产精品久久久 | 天美传媒精品一区 | 99热成人精品国产免国语的 | 国产亚洲一欧美一区二区三区 | aa级毛片 | 97久久精品午夜一区二区 | 天天操综| 色网电影 | 日韩欧美一区二区三区不卡在线 | 久久精品国产亚洲精品2020 | 国产精品一区在线观看 | 国产网站在线 | 欧美精品在线免费观看 | 欧美亚洲图区 | 日本特级淫片免费看 | 一区二区精品 | 欧美精品在线看 | 国产欧美第一页 | 色综合91久久精品中文字幕 | 亚洲国产精品欧美日韩一区二区 | 一本色道久久88综合亚洲精品高清 | 一级成人毛片免费观看 | 国产伦精品一区二区三区视频小说 | 国产精品资源在线播放 | 最新亚洲精品 | 亚洲欧美综合图区官网 | 一区二区在线观看视频 | 香蕉视频网页版 |