日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

javascript引擎工作原理

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

簡單地說,JavaScript解析引擎就是能夠“讀懂”JavaScript代碼,并準(zhǔn)確地給出代碼運(yùn)行結(jié)果的一段程序。比方說,當(dāng)你寫了 var a = 1 + 1; 這樣一段代碼,JavaScript引擎做的事情就是看懂(解析)你這段代碼,并且將a的值變?yōu)?。

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

但是,現(xiàn)在很難去界定說,JavaScript引擎它到底算是個(gè)解釋器還是個(gè)編譯器,因?yàn)椋热缦馰8(Chrome的JS引擎),它其實(shí)為了提高 JS的運(yùn)行性能,在運(yùn)行之前會先將JS編譯為本地的機(jī)器碼(native machine code),然后再去執(zhí)行機(jī)器碼(這樣速度就快很多),相信大家對JIT(Just In Time Compilation)一定不陌生吧。

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

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

2. JavaScript解析引擎與ECMAScript是什么關(guān)系?

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

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

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

中間的等號表示了這是個(gè)賦值語句

最后的分號表示這句語句結(jié)束了

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

var,if,else,break,continue等是JavaScript的關(guān)鍵詞

abstract,int,long等是JavaScript保留詞

怎么樣算是數(shù)字、怎么樣算是字符串等等

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

定義了JavaScript的語法

定義了對表達(dá)式,語句等標(biāo)準(zhǔn)的處理算法,比如遇到==該如何處理

??

標(biāo)準(zhǔn)的JavaScript引擎就會根據(jù)這套文檔去實(shí)現(xiàn),注意這里強(qiáng)調(diào)了標(biāo)準(zhǔn),因?yàn)橐灿胁话凑諛?biāo)準(zhǔn)來實(shí)現(xiàn)的,比如IE的JS引擎。這也是為什么JavaScript會有兼容性的問題。至于為什么IE的JS引擎不按照標(biāo)準(zhǔn)來實(shí)現(xiàn),就要說到瀏覽器大戰(zhàn)了,這里就不贅述了,自行Google之。

所以,簡單的說,ECMAScript定義了語言的標(biāo)準(zhǔn),JavaScript引擎根據(jù)它來實(shí)現(xiàn),這就是兩者的關(guān)系。

3. JavaScript解析引擎與瀏覽器又是什么關(guān)系?

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

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

4. 深入了解其內(nèi)部原理的途徑有哪些?

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

看講JavaScript引擎工作原理的書

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

看ECMAScript的標(biāo)準(zhǔn)文檔

這種方式相對直接,原汁原味,因?yàn)橐婢褪歉鶕?jù)標(biāo)準(zhǔn)來實(shí)現(xiàn)的。目前來說,可以看第五版和第三版,不過要看懂也是不容易的。

看JS引擎源代碼

這種方式最直接,當(dāng)然也最難了。因?yàn)檫€牽涉到了如何實(shí)現(xiàn)詞法分析器,語法分析器等等更加底層的東西了,而且并非所有的引擎代碼都是開源的。

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

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

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

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

缺乏相應(yīng)的領(lǐng)域知識

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品99久久精品| 在线观看一区| 欧美久久一区二区三区| 日韩专区一卡二卡| 国产亚洲激情| 在线午夜精品| 蜜桃久久av| 中文字幕一区二区av| 日韩一区二区免费看| 欧美女激情福利| 亚洲综合日本| 日韩中文字幕在线一区| 97久久亚洲| 国产精品视频一区视频二区| 国产美女亚洲精品7777| 国产精品美女久久久久久不卡| 国产精品亚洲一区二区在线观看| 国产日韩欧美三区| 麻豆精品av| 日韩精品1区| 亚洲91精品| 国产亚洲毛片| 亚洲精品日本| 欧美另类中文字幕 | 午夜日韩福利| 亚洲欧美一级| 国产精品久久| 日韩国产一区二区| 亚洲少妇在线| 日韩极品在线观看| 成人午夜网址| 欧美福利一区| 在线精品福利| 国产精品v日韩精品v欧美精品网站 | 999久久久精品国产| 亚洲国产日韩欧美在线| 亚洲精品成人一区| 国产中文字幕一区二区三区| 伊人久久大香线蕉av不卡| 日韩制服丝袜av| 久久成人av| 99tv成人| 日本中文字幕不卡| 国产在线观看91一区二区三区 | 亚洲精品动态| 国产精品18| 久久国产影院| 亚洲精品九九| аⅴ资源天堂资源库在线| 黄页网站一区| 国产精品久久久久久久久久久久久久久 | av资源中文在线| 日韩午夜高潮| 麻豆国产精品一区二区三区| 欧美高清一区| 国产精品久久久久久久久免费高清| 日韩精品永久网址| 中文字幕一区二区精品区| 国产一区二区三区日韩精品| 国产精品美女久久久浪潮软件| 青青国产精品| 欧美成人午夜| 国产精品qvod| 久久亚洲在线| 清纯唯美亚洲综合一区| 激情六月综合| 国产精品1区| 免费中文字幕日韩欧美| 水蜜桃精品av一区二区| 亚洲丝袜啪啪| 成人精品亚洲| 国产剧情一区| 美女网站久久| 美女av在线免费看| 日韩欧美高清一区二区三区| 日韩中文在线播放| 久久国产人妖系列| 亚洲精品成人| 国产精品99久久免费观看| 国产视频一区三区| 国产成人免费视频网站视频社区| 中文字幕一区二区精品区| 日韩精品麻豆| 精品黄色一级片| 亚洲三级国产| 激情综合网站| 国产精品久久久久久久免费观看 | 麻豆精品久久| 日本vs亚洲vs韩国一区三区二区| 亚洲先锋成人| 岛国精品一区| 91麻豆精品激情在线观看最新| 欧美另类专区| 久久一级电影| 日韩理论片av| 精品久久亚洲| 国产精品久久777777毛茸茸| 最新亚洲国产| 国产一级久久| 婷婷成人在线| 色婷婷久久久| 国产一区二区亚洲| 国产欧美日韩在线一区二区| 美女久久网站| 一区福利视频| 在线观看精品| 水蜜桃久久夜色精品一区| 国产精品va| 国产精品亚洲人成在99www| 日本不卡一区二区| 亚洲精品综合| 久久亚洲欧美| 亚洲欧美日韩精品一区二区| 亚洲成人精选| 不卡中文字幕| 国产一区观看| 激情五月色综合国产精品| 亚洲成人二区| 99精品小视频| 欧美综合另类| 国产91精品对白在线播放| 日韩欧美另类一区二区| 高清av不卡| 日韩在线看片| 日韩在线精品| 日韩免费久久| 青青久久av| 九九久久电影| 国产精品人人爽人人做我的可爱| 欧美日韩国产在线一区| 蜜臀av免费一区二区三区| 久久精品不卡| 免费视频一区三区| 亚洲欧洲另类| 久久亚洲影院| 日韩影院免费视频| 亚洲天堂日韩在线| 香蕉久久一区| 日韩一区二区三区精品| 欧美久久精品| 国产精品密蕾丝视频下载| 国产精品sm| 国产一区二区三区亚洲| 亚洲精品成人图区| 精品一区亚洲| 另类亚洲自拍| 日本不卡中文字幕| 麻豆久久一区| 四虎4545www国产精品 | 亚洲tv在线| 国产伦理一区| 国产一区二区三区四区五区| 日韩欧美一区二区三区在线观看| 香蕉人人精品| 蜜臀国产一区二区三区在线播放| 午夜视频一区二区在线观看| 日韩av网站在线免费观看| 国产精久久一区二区| 美女av在线免费看| 99久久夜色精品国产亚洲狼| 亚洲女同中文字幕| 亚洲人成高清| 久久亚洲资源中文字| 久久精品主播| 在线精品福利| 国产精品久久久久77777丨| 日韩欧美精品综合| 另类亚洲自拍| 国产精品videossex久久发布| 日韩视频网站在线观看| 蜜臀久久久久久久| 久久精品国产在热久久| 99久久99久久精品国产片果冰 | 国产麻豆综合| 欧美日韩亚洲一区三区| 四虎成人av| 丝袜诱惑制服诱惑色一区在线观看 | 色婷婷亚洲mv天堂mv在影片| 欧美日韩视频| 国产麻豆一区二区三区| 亚洲一级少妇| 日韩精品久久理论片| 一区二区三区四区日本视频| 午夜一区在线| 老色鬼精品视频在线观看播放| 蜜桃成人av| 国产精品色在线网站| 久久亚洲精品中文字幕蜜潮电影| 日韩一区网站| 桃色一区二区| 日本欧美一区二区| 日韩免费小视频| 亚洲精选久久| 美女福利一区二区三区| 亚洲ab电影| 岛国av在线播放| 日韩午夜一区| 激情中国色综合| 婷婷精品在线观看| 久久一级电影|