js高端系列教程(整理版)

js高端系列教程(整理版)

ID:8967182

大?。?59.00 KB

頁(yè)數(shù):95頁(yè)

時(shí)間:2018-04-13

js高端系列教程(整理版)_第1頁(yè)
js高端系列教程(整理版)_第2頁(yè)
js高端系列教程(整理版)_第3頁(yè)
js高端系列教程(整理版)_第4頁(yè)
js高端系列教程(整理版)_第5頁(yè)
資源描述:

《js高端系列教程(整理版)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、js高端系列教程(1)——我們應(yīng)該如何去了解JavaScript引擎的工作原理昨天收到一封來(lái)自深圳的一位前端童鞋的郵件,郵件內(nèi)容如下(很抱歉,未經(jīng)過(guò)他的允許,公開(kāi)郵件內(nèi)容,不過(guò)我相信其他人肯定也有同樣的問(wèn)題,所以,直接把問(wèn)題原文拋出來(lái)):“讀了你的幾篇關(guān)于JS(變量對(duì)象、作用域、上下文、執(zhí)行代碼)的文章,我個(gè)人覺(jué)得有點(diǎn)抽象,難以深刻理解。我想請(qǐng)教下通過(guò)什么途徑能夠深入點(diǎn)的了解javascript解析引擎在執(zhí)行代碼前后是怎么工作的,ecma英文版實(shí)在看不下去呵呵?!逼鋵?shí)這個(gè)問(wèn)題個(gè)人覺(jué)得太籠統(tǒng)了,直接回答很難回答,所以,我打

2、算先把他的問(wèn)題拆解成如下幾個(gè)子問(wèn)題,并對(duì)其表達(dá)個(gè)人的觀點(diǎn),希望對(duì)有同樣困惑的童鞋能夠有所幫助。1.什么是JavaScript解析引擎?簡(jiǎn)單地說(shuō),JavaScript解析引擎就是能夠“讀懂”JavaScript代碼,并準(zhǔn)確地給出代碼運(yùn)行結(jié)果的一段程序。比方說(shuō),當(dāng)你寫(xiě)了?vara=1+1;?這樣一段代碼,JavaScript引擎做的事情就是看懂(解析)你這段代碼,并且將a的值變?yōu)?。學(xué)過(guò)編譯原理的人都知道,對(duì)于靜態(tài)語(yǔ)言來(lái)說(shuō)(如Java、C++、C),處理上述這些事情的叫編譯器(Compiler),相應(yīng)地對(duì)于JavaScrip

3、t這樣的動(dòng)態(tài)語(yǔ)言則叫解釋器(Interpreter)。這兩者的區(qū)別用一句話來(lái)概括就是:編譯器是將源代碼編譯為另外一種代碼(比如機(jī)器碼,或者字節(jié)碼),而解釋器是直接解析并將代碼運(yùn)行結(jié)果輸出。比方說(shuō),firebug的console就是一個(gè)JavaScript的解釋器。但是,現(xiàn)在很難去界定說(shuō),JavaScript引擎它到底算是個(gè)解釋器還是個(gè)編譯器,因?yàn)?,比如像V8(Chrome的JS引擎),它其實(shí)為了提高JS的運(yùn)行性能,在運(yùn)行之前會(huì)先將JS編譯為本地的機(jī)器碼(nativemachinecode),然后再去執(zhí)行機(jī)器碼(這樣速度就

4、快很多),相信大家對(duì)JIT(JustInTimeCompilation)一定不陌生吧。我個(gè)人認(rèn)為,不需要過(guò)分去強(qiáng)調(diào)JavaScript解析引擎到底是什么,了解它究竟做了什么事情我個(gè)人認(rèn)為就可以了。對(duì)于編譯器或者解釋器究竟是如何看懂代碼的,翻出大學(xué)編譯課的教材就可以了。這里還要強(qiáng)調(diào)的就是,JavaScript引擎本身也是程序,代碼編寫(xiě)而成。比如V8就是用C/C++寫(xiě)的。2.JavaScript解析引擎與ECMAScript是什么關(guān)系?JavaScript引擎是一段程序,我們寫(xiě)的JavaScript代碼也是程序,如何讓程序去

5、讀懂程序呢?這就需要定義規(guī)則。比如,之前提到的vara=1+1;,它表示:·左邊var代表了這是申明(declaration),它申明了a這個(gè)變量·右邊的+表示要將1和1做加法·中間的等號(hào)表示了這是個(gè)賦值語(yǔ)句·最后的分號(hào)表示這句語(yǔ)句結(jié)束了上述這些就是規(guī)則,有了它就等于有了衡量的標(biāo)準(zhǔn),JavaScript引擎就可以根據(jù)這個(gè)標(biāo)準(zhǔn)去解析JavaScript代碼了。那么這里的ECMAScript就是定義了這些規(guī)則。其中ECMAScript262這份文檔,就是對(duì)JavaScript這門(mén)語(yǔ)言定義了一整套完整的標(biāo)準(zhǔn)。其中包括:·var

6、,if,else,break,continue等是JavaScript的關(guān)鍵詞·abstract,int,long等是JavaScript保留詞·怎么樣算是數(shù)字、怎么樣算是字符串等等·定義了操作符(+,-,>,<等)·定義了JavaScript的語(yǔ)法·定義了對(duì)表達(dá)式,語(yǔ)句等標(biāo)準(zhǔn)的處理算法,比如遇到==該如何處理·??標(biāo)準(zhǔn)的JavaScript引擎就會(huì)根據(jù)這套文檔去實(shí)現(xiàn),注意這里強(qiáng)調(diào)了標(biāo)準(zhǔn),因?yàn)橐灿胁话凑諛?biāo)準(zhǔn)來(lái)實(shí)現(xiàn)的,比如IE的JS引擎。這也是為什么JavaScript會(huì)有兼容性的問(wèn)題。至于為什么IE的JS引擎不按照標(biāo)準(zhǔn)來(lái)

7、實(shí)現(xiàn),就要說(shuō)到瀏覽器大戰(zhàn)了,這里就不贅述了,自行Google之。所以,簡(jiǎn)單的說(shuō),ECMAScript定義了語(yǔ)言的標(biāo)準(zhǔn),JavaScript引擎根據(jù)它來(lái)實(shí)現(xiàn),這就是兩者的關(guān)系。3.JavaScript解析引擎與瀏覽器又是什么關(guān)系?簡(jiǎn)單地說(shuō),JavaScript引擎是瀏覽器的組成部分之一。因?yàn)闉g覽器還要做很多別的事情,比如解析頁(yè)面、渲染頁(yè)面、Cookie管理、歷史記錄等等。那么,既然是組成部分,因此一般情況下JavaScript引擎都是瀏覽器開(kāi)發(fā)商自行開(kāi)發(fā)的。比如:IE9的Chakra、Firefox的TraceMonkey

8、、Chrome的V8等等。從而也看出,不同瀏覽器都采用了不同的JavaScript引擎。因此,我們只能說(shuō)要深入了解哪個(gè)JavaScript引擎。4.深入了解其內(nèi)部原理的途徑有哪些?搞清楚了前面三個(gè)問(wèn)題,那這個(gè)問(wèn)題就好回答了。個(gè)人認(rèn)為,主要途徑有如下幾種(依次由淺入深):·看講JavaScript引擎工作原理的書(shū)這種方

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。