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

資訊專欄INFORMATION COLUMN

關(guān)于JavaScript的編譯原理

anquan / 3029人閱讀

摘要:引擎負(fù)責(zé)整個(gè)程序的編譯和執(zhí)行過程編譯器負(fù)責(zé)語(yǔ)法分析和代碼生成作用域收集和維護(hù)一系列查詢由所有聲明的標(biāo)識(shí)符組成例子聲明一個(gè)變量并賦值編譯器對(duì)該程序段分解成詞法單元編譯器對(duì)以上的詞法單元解析成一個(gè)樹結(jié)構(gòu)抽象語(yǔ)法樹的語(yǔ)法解析器提供了一個(gè)在線解析的

引擎:負(fù)責(zé)整個(gè)js程序的編譯和執(zhí)行過程
編譯器:負(fù)責(zé)語(yǔ)法分析和代碼生成
作用域:收集和維護(hù)一系列查詢(由所有聲明的標(biāo)識(shí)符組成)

【例子:聲明一個(gè)變量并賦值 var a = value;】

Step1.編譯器對(duì)該程序段分解成詞法單元 "var" 、"a"、 "="、 "value"、";"

Step2.編譯器對(duì)以上的詞法單元解析成一個(gè)樹結(jié)構(gòu)(抽象語(yǔ)法樹AST)

javascript的語(yǔ)法解析器Espsrima提供了一個(gè)在線解析的工具

在過程中,編譯器詢問作用域是否已經(jīng)存在一個(gè)以"a"命名的變量在同一個(gè)作用域的集合中?若YES -> 編譯器忽略該聲明,繼續(xù)編譯;若NO -> 編譯器要求作用域在當(dāng)前作用域的集合中聲明一個(gè)新變量,命名為a

Step3.編譯器生成處理 賦值操作“a = 2”的代碼

Step4.引擎運(yùn)行step3生成的代碼時(shí)會(huì)詢問作用域,在當(dāng)前作用域的集合中是否存在一個(gè)叫"a"的變量?若YES -> 引擎使用變量a ->Step5;若NO -> 引擎沿著作用域鏈繼續(xù)查找變量a ->Step6

Step5.引擎執(zhí)行編譯器生成的代碼,把2賦值給變量a

Step6.引擎拋出一個(gè)異常

【總結(jié)】變量的賦值會(huì)經(jīng)過兩個(gè)階段:
1.編譯器在作用域中聲明一個(gè)變量(若之前未聲明過)
2.運(yùn)行時(shí)引擎在作用域中查找該變量

【擴(kuò)展】
Step4中引擎查詢變量有兩種類型:LHS 和 RHS
LHS: 找到變量的容器本身
RHS:找到變量的值

例子:

function foo(a){
        var b = a;
        return a+b
       }
var c = foo(2);

//在該例子中,LHS有:a = 2 、c= 、b=
//RHS有:=foo(2)、 =a、a+、+b

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/88736.html

相關(guān)文章

  • [譯文] JavaScript工作原理:V8引擎內(nèi)部+5條優(yōu)化代碼竅門

    摘要:本文將會(huì)深入分析的引擎的內(nèi)部實(shí)現(xiàn)。該引擎使用在谷歌瀏覽器內(nèi)部。同其他現(xiàn)代引擎如或所做的一樣,通過實(shí)現(xiàn)即時(shí)編譯器在執(zhí)行時(shí)將代碼編譯成機(jī)器代碼。這可使正常執(zhí)行期間只發(fā)生相當(dāng)短的暫停。 原文 How JavaScript works: inside the V8 engine + 5 tips on how to write optimized code 幾周前我們開始了一個(gè)系列博文旨在深入...

    dreamans 評(píng)論0 收藏0
  • JavaScript工作原理(六):WebAssembly比較分析和特定情況下最好在JavaScri

    摘要:我們將拆分來分析它的工作原理,更重要的是,它在性能方面如何提升加載時(shí)間,執(zhí)行速度,垃圾回收,內(nèi)存使用率,平臺(tái)訪問,調(diào)試,多線程和可移植性。目前,是圍繞和用例設(shè)計(jì)的。多線程在單個(gè)線程上運(yùn)行。目前不支持多線程。被設(shè)計(jì)為安全和便攜。 我們將拆分WebAssembly來分析它的工作原理,更重要的是,它在性能方面如何提升JavaScript:加載時(shí)間,執(zhí)行速度,垃圾回收,內(nèi)存使用率,平臺(tái)API訪...

    novo 評(píng)論0 收藏0
  • JavaScript工作原理(二):V8引擎和5招高效代碼

    摘要:引擎可以用標(biāo)準(zhǔn)解釋器或即時(shí)編譯器來實(shí)現(xiàn),即時(shí)編譯器以某種形式將代碼編譯為字節(jié)碼。這里的主要區(qū)別在于不生成字節(jié)碼或任何中間代碼。請(qǐng)注意,不使用中間字節(jié)碼表示法,不需要解釋器。這允許在正常執(zhí)行期間非常短的暫停。 本系列的第一篇文章重點(diǎn)介紹了引擎,運(yùn)行時(shí)和調(diào)用棧的概述。第二篇文章將深入V8的JavaScript引擎的內(nèi)部。我們還會(huì)提供一些關(guān)于如何編寫更好的JavaScript代碼的技巧。 概...

    leone 評(píng)論0 收藏0
  • WebAssembly 系列(四)WebAssembly 工作原理

    摘要:但是它們其實(shí)并不是二選一的關(guān)系并不是只能用或者。正因?yàn)槿绱耍噶钣袝r(shí)也被稱為虛擬指令。這是因?yàn)槭遣捎没跅5奶摂M機(jī)的機(jī)制。聲明模塊的全局變量。。下文預(yù)告現(xiàn)在你已經(jīng)了解了模塊的工作原理,下面將會(huì)介紹為什么運(yùn)行的更快。 作者:Lin Clark 編譯:胡子大哈 翻譯原文:http://huziketang.com/blog/posts/detail?postId=58c77641a6d8...

    stormzhang 評(píng)論0 收藏0
  • 如何開始學(xué)習(xí) V8

    摘要:如果不行的話,不用擔(dān)心,當(dāng)你審查錯(cuò)誤時(shí)會(huì)學(xué)習(xí)到知識(shí)的。但是任何人不得不從某處開始,也許你堅(jiān)持,會(huì)在未來看到來自你的變更記錄。 本文轉(zhuǎn)載自:眾成翻譯譯者:yu-wj鏈接:http://www.zcfy.cc/article/3963原文:https://medium.com/dailyjs/how-do-i-get-started-with-v8-development-17e976eb...

    googollee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<