javascript原生知識 之js編譯機制

js編譯機制

? ? 首先骚秦,對javascript我們通常稱之為“動態(tài)”或“解釋執(zhí)行語言”她倘,但事實上它是一門編譯語言。但與傳統(tǒng)的編譯語言不同作箍,它不是提前編譯的硬梁,編譯結(jié)果也不能在分布式系統(tǒng)中進行移植。
? ? 在傳統(tǒng)編譯語言的流程中胞得,程序中的一段源代碼在執(zhí)行之前會經(jīng)歷三個步驟荧止,統(tǒng)稱為“編譯”
? ? 1、分詞/詞法分析(Tokenizing/Lexing)
? ? ? ? 這個過程會將由字符組成的字符串分解成(對編程語言來說)有意義的代碼塊阶剑,這些代碼塊被稱為詞法單元(token)跃巡。例如,考慮程序var a = 2; 這段程序通常會被分解成下面這些詞法單元:? var牧愁、a素邪、=、2猪半、兔朦;. 空格是否會被當作詞法單元偷线,取決于空格在這門語言中是否具有意義。
? ? ? ?分詞(tokenizing)和詞法分析(Lexing)之間的區(qū)別是非常微妙的烘绽、晦澀的,主要差異在于詞法單元的識別是通過有狀態(tài)還是無狀態(tài)的方式進行的俐填。簡單來說安接,如果詞法單元生成器在判斷a是一個獨立的詞法單元還是其它詞法單元的一部分時,調(diào)用的是有狀態(tài)的解析規(guī)則英融,那么這個過程就被稱為詞法分析盏檐。
? ? 2、解析/語法分析(Parsing)
? ? ? ? 這個過程是將詞法單元流(數(shù)組)轉(zhuǎn)換成一個由元素逐級嵌套所組成的代表了程序語法結(jié)構(gòu)的樹驶悟。這個樹被稱為“抽象語法樹”(Abstract SyntaxTree, AST)胡野。var a = 2;的抽象語法樹中可能會有一個叫做VariableDeclaration的頂級節(jié)點痕鳍,接下來是一個叫作Identifier(它的值是a)的子節(jié)點硫豆,以及一個叫作AssignmentExpression的子節(jié)點。AssignmentExpression節(jié)點有一個叫作NumericLiteral(它的值是2)的子節(jié)點笼呆。
? ? 3熊响、代碼生成
? ? ? ? 將AST轉(zhuǎn)換成可執(zhí)行代碼的過程被稱為代碼生成。這個過程與語言诗赌、目標平臺等息息相關(guān)汗茄。
? ? ? ? 拋開具體細節(jié),簡單來說就是有某種方法可以將var a = 2;的AST轉(zhuǎn)換為一組機器指令铭若,用來創(chuàng)建一個叫作a的變量(包括分配內(nèi)存等)洪碳,并將一個值儲存在a中。
? ? ? ??
? ? ? ? 任何javascript代碼片段在執(zhí)行前都要執(zhí)行編譯(通常就在執(zhí)行前)叼屠,大部分情況下編譯發(fā)生在代碼執(zhí)行前的幾微秒(甚至更短)的時間內(nèi)瞳腌。比如編譯器對var a= 2;這段代碼進行編譯,然后做好執(zhí)行它的準備镜雨,并且通常馬上就會執(zhí)行它纯趋。

? ? ? ? 最后,對于JS執(zhí)行時關(guān)于分號的問題: J中會自動清除句子和句子之間的空格及tab縮進冷离,這樣就可以允許用戶編寫的代碼更加隨性和更加可讀吵冒,在該行代碼解析的時候如果該行代碼可以解析,就會在該行代碼最后自動填寫分號西剥,如果該行代碼無法解析就會把該行代碼和下一句代碼合并痹栖,直到代碼可以解析。
? ? ? ? JS中如果一個語句以( [ / + - 開頭瞭空, 就有可能于上一句合在一起解析揪阿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疗我,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子南捂,更是在濱河造成了極大的恐慌吴裤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,029評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件溺健,死亡現(xiàn)場離奇詭異麦牺,居然都是意外死亡,警方通過查閱死者的電腦和手機鞭缭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評論 3 385
  • 文/潘曉璐 我一進店門剖膳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人岭辣,你說我怎么就攤上這事吱晒。” “怎么了沦童?”我有些...
    開封第一講書人閱讀 157,570評論 0 348
  • 文/不壞的土叔 我叫張陵仑濒,是天一觀的道長。 經(jīng)常有香客問我偷遗,道長躏精,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,535評論 1 284
  • 正文 為了忘掉前任鹦肿,我火速辦了婚禮矗烛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘箩溃。我一直安慰自己瞭吃,他們只是感情好,可當我...
    茶點故事閱讀 65,650評論 6 386
  • 文/花漫 我一把揭開白布涣旨。 她就那樣靜靜地躺著歪架,像睡著了一般。 火紅的嫁衣襯著肌膚如雪霹陡。 梳的紋絲不亂的頭發(fā)上和蚪,一...
    開封第一講書人閱讀 49,850評論 1 290
  • 那天,我揣著相機與錄音烹棉,去河邊找鬼攒霹。 笑死,一個胖子當著我的面吹牛浆洗,可吹牛的內(nèi)容都是我干的催束。 我是一名探鬼主播,決...
    沈念sama閱讀 39,006評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼伏社,長吁一口氣:“原來是場噩夢啊……” “哼抠刺!你這毒婦竟也來了塔淤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,747評論 0 268
  • 序言:老撾萬榮一對情侶失蹤速妖,失蹤者是張志新(化名)和其女友劉穎高蜂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體罕容,經(jīng)...
    沈念sama閱讀 44,207評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡备恤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,536評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了杀赢。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烘跺。...
    茶點故事閱讀 38,683評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡湘纵,死狀恐怖脂崔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梧喷,我是刑警寧澤砌左,帶...
    沈念sama閱讀 34,342評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站铺敌,受9級特大地震影響汇歹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜偿凭,卻給世界環(huán)境...
    茶點故事閱讀 39,964評論 3 315
  • 文/蒙蒙 一产弹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧弯囊,春花似錦痰哨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至霎烙,卻和暖如春撬讽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悬垃。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評論 1 266
  • 我被黑心中介騙來泰國打工游昼, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尝蠕。 一個月前我還...
    沈念sama閱讀 46,401評論 2 360
  • 正文 我出身青樓酱床,卻偏偏與公主長得像,于是被迫代替她去往敵國和親趟佃。 傳聞我的和親對象是個殘疾皇子扇谣,可洞房花燭夜當晚...
    茶點故事閱讀 43,566評論 2 349

推薦閱讀更多精彩內(nèi)容