国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript運行原理解析

goji / 1981人閱讀

摘要:執行過程引擎會加載源代碼,把它分解成字符串又叫做分詞,再把這些字符串轉換成編譯器可以理解的字節碼,然后執行這些字節碼。接著四個進程開始參與進來,分析和執行解析器所生成的字節碼。

JavaScript運行原理

知其然,也要知其所以然,這里主要談一談對JavaScript運行原理的理解。

JAVA虛擬機

首先我們從JAVA虛擬機說起。

首先說一下為什么要做成虛擬機,因為機器不同,如果沒有虛擬機我們就相當于需要針對每一種機器都要進行代碼編譯,這樣肯定是不合理的。所以為了解決這樣的問題,Java引入虛擬機(VM)的概念,讓編譯后的代碼直接跑在一臺虛擬的機器上,無論最終的目標平臺是什么,都在上面構建出一個虛擬的一致的虛擬機出來,就可以達到一次編譯到處執行的效果了。

而從根本上來說Java和C#不是Native語言,編譯的結果不是機器指令,而是某種自有的指令格式,自己運行不了,需要專門的程序去解釋執行,這個程序就是我們所說的“虛擬機”。

反之,C、C++、Go、Rust這種語言是Native語言,編譯出來的結果是機器指令,可以自己直接運行,不存在“虛擬機”的概念。

JavaScript引擎

而JavaScript引擎所做的工作和JAVA虛擬機很相似

做了什么

JS引擎主要是對JS代碼進行詞法、語法等分析,通過編譯器將代碼編譯成可執行的機器碼讓計算機去執行。

簡單來說它的唯一的目的就是讀取和編譯JavaScript代碼,也就是說可以分析、解釋、優化、垃圾回收javascript代碼。

執行過程

JavaScript引擎會加載源代碼,把它分解成字符串(又叫做分詞),再把這些字符串轉換成編譯器可以理解的字節碼,然后執行這些字節碼。

Google的V8引擎是用C++ 編寫的,它也能夠編譯并執行JavaScript源代碼、處理內存分配和垃圾回收。它被設計成由兩個編譯器組成,可以把源碼直接編譯成機器碼,具體的執行過程可以看成以下幾步:

它進行詞法分析,就是將源代碼分解成一系列具有明確含義的符號或字符串。

然后用語法分析器分析這些符號,將其構建成語法樹。

接著四個 JIT(Just-In-Time)進程開始參與進來,分析和執行解析器所生成的字節碼。

與ECMAScript的關系

準確地講,每個JavaScript引擎都實現了一個版本的ECMAScript,JavaScript是它的一個分支。隨著ECMAScript的不斷發展,JavaScript引擎也不斷改進。之所以有這么多不同的引擎,是因為它們每個都被設計運行在不同的web瀏覽器、headless瀏覽器、或者像Node.js那樣的運行時環境中。

JavaScript引擎是一段程序,我們寫的JavaScript代碼也是程序,如何讓程序去讀懂程序呢?這就需要定義規則。比如:

var a = 1 + 1

左邊var代表了這是申明(declaration),它申明了a這個變量
右邊的+表示要將1和1做加法
中間的等號表示了這是個賦值語句
最后的分號表示這句語句結束了
上述這些就是規則,有了它就等于有了衡量的標準,JavaScript引擎就可以根據這個標準去解析JavaScript代碼了。那么這里的ECMAScript就是定義了這些規則。其中ECMAScript 62這份文檔,就是對JavaScript這門語言定義了一整套完整的標準。其中包括:

var,if,else,break,continue等是JavaScript的關鍵詞
abstract,int,long等是JavaScript保留詞
怎么樣算是數字、怎么樣算是字符串等等
定義了操作符(+,-,>,<等)
定義了JavaScript的語法
定義了對表達式,語句等標準的處理算法,比如遇到==該如何處理
標準的JavaScript引擎就會根據這套文檔去實現,注意這里強調了標準,因為也有不按照標準來實現的,比如IE的JS引擎。這也是為什么JavaScript會有兼容性的問題。至于為什么IE的JS引擎不按照標準來實現,就要說到瀏覽器大戰了,這里就不贅述了,自行Google之。

所以,簡單的說,ECMAScript定義了語言的標準,JavaScript引擎根據它來實現,這就是兩者的關系。

RunTime

運行時可以簡單理解為當前的運行環境,不同的環境提供了不同的api調用,如web瀏覽器中的window對象,DOM相關API等,這些接口可以提供相關的JS調用,

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/101013.html

相關文章

  • JavaScript 工作原理之十四-解析,語法抽象樹及最小化解析時間的 5 條小技巧

    摘要:事實是只是部分語言的不同表示法。基于這些,解析器會進行立即或者懶解析。然而,解析器做了完全不相關的額外無用功即解析函數。這里不解析函數,該函數聲明了卻沒有指出其用途。所以之前的例子,解析器實際上 原文請查閱這里,本文采用知識共享署名 4.0 國際許可協議共享,BY Troland。 本系列持續更新中,Github 地址請查閱這里。 這是 JavaScript 工作原理的第十四章。 概...

    ZweiZhao 評論0 收藏0
  • JavaScript 工作原理之十四-解析,語法抽象樹及最小化解析時間的 5 條小技巧

    摘要:事實是只是部分語言的不同表示法。基于這些,解析器會進行立即或者懶解析。然而,解析器做了完全不相關的額外無用功即解析函數。這里不解析函數,該函數聲明了卻沒有指出其用途。所以之前的例子,解析器實際上 原文請查閱這里,本文采用知識共享署名 4.0 國際許可協議共享,BY Troland。 本系列持續更新中,Github 地址請查閱這里。 這是 JavaScript 工作原理的第十四章。 概...

    xuxueli 評論0 收藏0
  • JavaScript 工作原理之十四-解析,語法抽象樹及最小化解析時間的 5 條小技巧

    摘要:事實是只是部分語言的不同表示法。基于這些,解析器會進行立即或者懶解析。然而,解析器做了完全不相關的額外無用功即解析函數。這里不解析函數,該函數聲明了卻沒有指出其用途。所以之前的例子,解析器實際上 原文請查閱這里,本文采用知識共享署名 4.0 國際許可協議共享,BY Troland。 本系列持續更新中,Github 地址請查閱這里。 這是 JavaScript 工作原理的第十四章。 概...

    jsliang 評論0 收藏0
  • JavaScript 工作原理之十一-渲染引擎及性能優化小技巧

    摘要:在中渲染樹中的每個節點即是一個渲染器或者渲染器對象。計算的樣式每個渲染器對象代表一個矩形區域通常是和一個節點的盒模型相對應。坐標系統是相對于根渲染器的。根渲染器的定位為和大小即為瀏覽器窗口的可視化部分比如。渲染器作廢其在屏幕上的矩形區域。 原文請查閱這里,略有刪減,本文采用知識共享署名 4.0 國際許可協議共享,BY Troland。 本系列持續更新中,Github 地址請查閱這里。 ...

    GraphQuery 評論0 收藏0

發表評論

0條評論

goji

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<