成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

javascript引擎工作原理

瀏覽:187日期:2023-11-10 16:39:56
1. 什么是JavaScript解析引擎?

簡單地說,JavaScript解析引擎就是能夠“讀懂”JavaScript代碼,并準確地給出代碼運行結果的一段程序。比方說,當你寫了 var a = 1 + 1; 這樣一段代碼,JavaScript引擎做的事情就是看懂(解析)你這段代碼,并且將a的值變為2。

學過編譯原理的人都知道,對于靜態語言來說(如Java、C++、C),處理上述這些事情的叫編譯器(Compiler),相應地對于JavaScript這樣的動態語言則叫解釋器(Interpreter)。這兩者的區別用一句話來概括就是:編譯器是將源代碼編譯為另外一種代碼(比如機器碼,或者字節碼),而解釋器是直接解析并將代碼運行結果輸出。 比方說,firebug的console就是一個JavaScript的解釋器。

但是,現在很難去界定說,JavaScript引擎它到底算是個解釋器還是個編譯器,因為,比如像V8(Chrome的JS引擎),它其實為了提高 JS的運行性能,在運行之前會先將JS編譯為本地的機器碼(native machine code),然后再去執行機器碼(這樣速度就快很多),相信大家對JIT(Just In Time Compilation)一定不陌生吧。

我個人認為,不需要過分去強調JavaScript解析引擎到底是什么,了解它究竟做了什么事情我個人認為就可以了。對于編譯器或者解釋器究竟是如何看懂代碼的,翻出大學編譯課的教材就可以了。

這里還要強調的就是,JavaScript引擎本身也是程序,代碼編寫而成。比如V8就是用C/C++寫的。

2. JavaScript解析引擎與ECMAScript是什么關系?

JavaScript引擎是一段程序,我們寫的JavaScript代碼也是程序,如何讓程序去讀懂程序呢?這就需要定義規則。比如,之前提到的var a = 1 + 1;,它表示:

左邊var代表了這是申明(declaration),它申明了a這個變量

右邊的+表示要將1和1做加法

中間的等號表示了這是個賦值語句

最后的分號表示這句語句結束了

上述這些就是規則,有了它就等于有了衡量的標準,JavaScript引擎就可以根據這個標準去解析JavaScript代碼了。那么這里的 ECMAScript就是定義了這些規則。其中ECMAScript 262這份文檔,就是對JavaScript這門語言定義了一整套完整的標準。其中包括:

var,if,else,break,continue等是JavaScript的關鍵詞

abstract,int,long等是JavaScript保留詞

怎么樣算是數字、怎么樣算是字符串等等

定義了操作符(+,-,>,<等)

定義了JavaScript的語法

定義了對表達式,語句等標準的處理算法,比如遇到==該如何處理

??

標準的JavaScript引擎就會根據這套文檔去實現,注意這里強調了標準,因為也有不按照標準來實現的,比如IE的JS引擎。這也是為什么JavaScript會有兼容性的問題。至于為什么IE的JS引擎不按照標準來實現,就要說到瀏覽器大戰了,這里就不贅述了,自行Google之。

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

3. JavaScript解析引擎與瀏覽器又是什么關系?

簡單地說,JavaScript引擎是瀏覽器的組成部分之一。因為瀏覽器還要做很多別的事情,比如解析頁面、渲染頁面、Cookie管理、歷史記錄 等等。那么,既然是組成部分,因此一般情況下JavaScript引擎都是瀏覽器開發商自行開發的。比如:IE9的Chakra、Firefox的 TraceMonkey、Chrome的V8等等。

從而也看出,不同瀏覽器都采用了不同的JavaScript引擎。因此,我們只能說要深入了解哪個JavaScript引擎。

4. 深入了解其內部原理的途徑有哪些?

搞清楚了前面三個問題,那這個問題就好回答了。個人認為,主要途徑有如下幾種(依次由淺入深):

看講JavaScript引擎工作原理的書

這種方式最方便,不過我個人了解到的這樣的書幾乎沒有,但是Dmitry A.Soshnikov博客上的文章真的是非常的贊,建議直接看英文,實在英文看起來吃力的,可以看譯本

看ECMAScript的標準文檔

這種方式相對直接,原汁原味,因為引擎就是根據標準來實現的。目前來說,可以看第五版和第三版,不過要看懂也是不容易的。

看JS引擎源代碼

這種方式最直接,當然也最難了。因為還牽涉到了如何實現詞法分析器,語法分析器等等更加底層的東西了,而且并非所有的引擎代碼都是開源的。

5. 以上幾種方式中第一種都很難看明白怎么辦?

其實第一種方式中的文章,作者已經將文檔中內容提煉出來,用通俗易懂的方式闡述出來了。如果,看起來還覺得吃力,那說明還缺少兩塊的東西:

對JavaScript本身還理解的不夠深入

如果你剛剛接觸JavaScript,或者說以前甚至都沒有接觸過。那一下子就想要去理解內部工作原理,的確是很吃力的。首先應該多看看書,多實踐實踐,從知識和實踐的方式來了解JavaScript預言特性。這種情況下,你只需要了解現象。比方說,(function(){})() 這樣可以直接調用該匿名函數、用閉包可以解決循環中的延遲操作的變量值獲取問題等等。要了解這些,都是需要多汲取和實踐的。實踐這里就不多說了,而知識汲取方面可以多看看書和博客。這個層面的書就相對比較多了,《Professional JavaScript for Web Developers》就是本很好的書(中文版請自行尋找)。

缺乏相應的領域知識

當JavaScript也達到一定深度了,但是,還是看不大明白,或者沒法很深入到內部去一探究竟。那就意味著缺少對 應的領域知識。這里明顯的就是編譯原理相關的知識。不過,其實對這塊了解個大概基本看起來就沒問題了。要再繼續深入,那需要對編譯原理了解的很深入,比如 說詞法分析采用什么算法,一般怎么處理。會有什么問題,如何解決,AST生成算法一般有哪幾種等等。那要看編譯原理方面的書,也有基本經典的書,比如《Compilers: Principles, Techniques, and Tools》這本也是傳說中的龍書,還有非常著名的《SICP》和《PLAI》。 不過其實根據個人經驗,對于Dmitry的文章,要看懂它,只要你對JavaScript有一定深度的了解,同時你大學計算機的課程都能大致掌握了(尤其 是操作系統),也就是說基礎不錯,理解起來應該沒問題。因為這些文章基本沒有涉及底層編譯相關的,只是在解釋文檔的內容,并且其中很多東西都是相通的,比 如:context的切換與CPU的進程切換、函數相關的的局部變量的棧存儲、函數退出的操作等等都是一致的。

標簽: JavaScript
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
国产精品免费一区二区三区观看 | 久久国产尿小便嘘嘘尿| 国外精品视频| www激情久久| 国产精华液一区二区三区| 久久一区二区精品| 亚洲欧美日韩人成在线播放| 欧美一区二区三区在线播放| 欧美成人一区二区三区片免费| 麻豆精品视频在线观看视频| 欧美亚洲免费| 亚洲一区中文日韩| 国产欧美日韩亚洲| 亚洲精品福利视频网站| 99在线|亚洲一区二区| 国产精品国产三级国产普通话三级| 欧美在线免费| 国产亚洲成年网址在线观看| 99这里只有精品| 久久亚洲欧美国产精品乐播| 成av人片一区二区| 日韩欧美亚洲一区二区| 粉嫩av一区二区三区粉嫩| 日韩亚洲欧美一区二区三区| 成人精品小蝌蚪| 国产亚洲一区二区三区四区| 欧美午夜电影在线观看| 亚洲婷婷综合久久一本伊一区| 亚洲三级毛片| 一区二区三区91| 亚洲综合社区| 丝袜亚洲另类欧美| 欧美日韩在线播| 国产不卡视频在线观看| 久久久精品黄色| 亚洲人成在线影院| 婷婷国产v国产偷v亚洲高清| 欧美日韩一区二区三区不卡| 国产高清不卡一区| 欧美成人三级电影在线| 欧美在线播放| 中文字幕五月欧美| 国产农村妇女毛片精品久久莱园子| 日韩在线播放一区二区| 欧美绝品在线观看成人午夜影视| 国产福利精品导航| 久久久久国产一区二区三区四区| 欧美成人首页| 亚洲在线成人精品| 在线视频你懂得一区| 成人午夜在线免费| 国产精品网友自拍| 国产伦精品一区二区三区高清版| 天天操天天色综合| 欧美另类高清zo欧美| 91麻豆视频网站| 一区二区三区四区乱视频| 欧美亚洲综合久久| 成人av电影在线| 国产精品盗摄一区二区三区| 午夜在线精品| 国产一区二区在线影院| 中文字幕不卡在线观看| 欧美在线综合| 成人污视频在线观看| 国产精品蜜臀av| 欧美三区免费完整视频在线观看| av在线这里只有精品| 亚洲欧洲综合另类| 欧美性大战久久| 91污片在线观看| 亚洲午夜久久久久久久久电影院| 欧美老年两性高潮| 97久久精品人人做人人爽50路| 亚洲男人的天堂一区二区| 色婷婷精品久久二区二区蜜臂av| 国产盗摄一区二区三区| 国产午夜精品理论片a级大结局 | 亚洲国产毛片aaaaa无费看| 欧美剧情片在线观看| 91蜜桃婷婷狠狠久久综合9色| 亚洲黄色免费网站| 欧美日韩高清一区二区不卡| 欧美视频网站| 黄一区二区三区| 综合电影一区二区三区| 欧美二区在线观看| 夜夜爽99久久国产综合精品女不卡| 美女一区二区视频| 国产三级一区二区三区| 老牛嫩草一区二区三区日本| 91免费看`日韩一区二区| 午夜精品免费在线观看| 久久中文娱乐网| 久久综合影音| 欧美日本免费| 喷水一区二区三区| 国产精品久久久久7777按摩| 欧美男生操女生| 国产视频一区欧美| 成人黄色电影在线 | 午夜亚洲福利老司机| 久久青草欧美一区二区三区| 一本色道久久综合亚洲91| 91网站在线播放| 久久精品免费观看| 亚洲嫩草精品久久| 久久婷婷色综合| 欧美午夜理伦三级在线观看| 99精品99久久久久久宅男| 国产 欧美在线| 日韩国产欧美视频| 中国av一区二区三区| 欧美精品一二三四| 国产精品久久久久久久久久直播| 成人小视频免费在线观看| 三级久久三级久久| 国产精品国产三级国产aⅴ无密码| 91麻豆精品国产91久久久资源速度| 国产精品亚洲综合久久| 欧美日韩一区自拍| 福利电影一区二区| 免费黄网站欧美| 一区二区三区在线播| 久久久精品国产免大香伊 | 精品久久五月天| 一本到不卡精品视频在线观看| 午夜日韩激情| 国产精品18久久久久久vr| 亚洲国产毛片aaaaa无费看| 中文av字幕一区| 日韩欧美国产精品一区| 欧美私模裸体表演在线观看| 国产精品一卡| 狠狠入ady亚洲精品经典电影| 国产成人免费网站| 男女男精品网站| 亚洲成人av一区二区三区| 国产精品久久国产精麻豆99网站| 精品国产免费视频| 欧美精品久久久久久久多人混战| 国产伦精品一区二区三区四区免费 | 18涩涩午夜精品.www| 久久九九国产精品| 日韩一区二区在线看片| 在线视频综合导航| 亚洲免费影院| 在线观看视频免费一区二区三区| 91免费观看国产| 成人午夜免费电影| 国产精品综合视频| 国产在线不卡一区| 久久成人久久爱| 日韩二区三区四区| 午夜久久久久久久久久一区二区| ●精品国产综合乱码久久久久 | 美女诱惑一区二区| 五月天激情综合网| 午夜欧美大尺度福利影院在线看 | av电影在线观看不卡| 成人免费黄色大片| 国产成人av电影| 国产成人小视频| 国产福利一区在线观看| 激情综合色综合久久综合| 久久福利视频一区二区| 精品在线一区二区三区| 美女脱光内衣内裤视频久久网站| 日韩中文字幕亚洲一区二区va在线 | 久久伊人蜜桃av一区二区| 欧美人与z0zoxxxx视频| 欧美三级电影一区| 欧美日韩国产另类不卡| 欧美人狂配大交3d怪物一区| 欧美日本精品一区二区三区| 国产日韩亚洲欧美精品| 亚洲精品美女久久7777777| 亚洲狠狠婷婷| 亚洲精品美女| 亚洲免费一区二区| 色婷婷av一区| 在线观看区一区二| 91精品国产综合久久福利| 欧美丰满美乳xxx高潮www| 91精品国产91久久久久久一区二区 | 国产日韩在线一区二区三区| 亚洲精品护士| 中国女人久久久| 国产美女在线精品免费观看| 香蕉视频成人在线观看| 国产精品毛片va一区二区三区| 国产精品美女| 美女爽到呻吟久久久久| 久久免费一区| 欧美视频一区二| 日韩一区二区不卡| 精品1区2区在线观看| 国产亚洲婷婷免费| 亚洲欧美国产毛片在线| 亚洲www啪成人一区二区麻豆|