我們知道,所謂的JavaScript引擎是專門處理JavaScript腳本的虛擬機,通常會附帶在網頁瀏覽器中,用於解析和執行JavaScript腳本。那麼今天就來詳細解析一下JS引擎運作時是什麼樣的。
JavaScript虛擬機是一種流程虛擬機,它具備的一個特性就是有一個虛擬的指令集(ISA)。
JavaScript 引擎說起來最流行的當然是谷歌的V8 引擎了, V8 引擎使用在Chrome 以及Node 中,但與其他JavaScript引擎不一樣的是,V8這種只用JIT編譯器,不用解譯器來執行JavaScript的實作。下面有個簡單的圖能說明他們的關係:
這個引擎主要由兩部分組成:
記憶體堆:這是記憶體分配發生的地方調用堆疊:這是你的程式碼執行時的地方
運行時
有些瀏覽器的API 經常被使用到(比如說:setTimeout),但是,這些API 卻不是引擎提供的。那麼,他們是從哪裡來的呢?事實上這裡面實際情況有點複雜。
上圖中,主執行緒運行的時候,產生堆疊(heap)和堆疊(stack),堆疊中的程式碼呼叫各種外部API,它們在」任務佇列」中加入各種事件(click,load,done)。只要堆疊中的程式碼執行完畢,主執行緒就會去讀取”任務佇列”,依序執行那些事件所對應的回呼函數。
執行堆疊中的程式碼(同步任務),總是在讀取」任務佇列」(非同步任務)之前執行。
除了放置非同步任務的事件,」任務佇列」還可以放置定時事件,即指定某些程式碼在多少時間之後執行。
所以說我們還有很多引擎以外的 API,我們把這些稱為瀏覽器提供的 Web API,比如說 DOM、AJAX、setTimeout等等。
綜上,形象的來說JavaScript引擎就是一台可以工作的機器,而JavaScript虛擬機就是這台機器的執行核心,JavaScript運行時就是機器。
相信看了這些案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
相關閱讀:
#以上是JS引擎運作時是什麼樣的的詳細內容。更多資訊請關注PHP中文網其他相關文章!