抽象語法樹:
????????在計算機科學中屈藐,抽象語法樹其實是源代碼的抽象語法結(jié)構(gòu)的樹狀表現(xiàn)形式
????????我們常用的瀏覽器就是通過將js代碼轉(zhuǎn)化為抽象語法樹來進行下一步的分析等其他操作霍转。所以將js轉(zhuǎn)化為抽象語法樹更利于程序的分析灭抑。
以add函數(shù)為例:
? ? ? ? 1.首先,我們拿到的這個語法塊粤咪,是一個FunctionDeclaration(函數(shù)聲明)對象。
????????2.用力分成三塊:
????????????一個id饰恕,就是它的名字,即add
????????????兩個params井仰,就是它的參數(shù)埋嵌,即[a, b]
????????????一塊body,也就是大括號內(nèi)的一堆東西
????????id:add沒辦法繼續(xù)拆下去了俱恶,它是一個最基礎(chǔ)Identifier(標志)對象雹嗦,用來作為函數(shù)的唯一標志,就像人的姓名一樣速那。
????????params繼續(xù)拆下去俐银,其實是兩個Identifier組成的數(shù)組。之后也沒辦法拆下去了端仰。
????????我們發(fā)現(xiàn)捶惜,body其實是一個BlockStatement(塊狀域)對象,用來表示是{return a + b}
????????打開Blockstatement荔烧,里面藏著一個ReturnStatement(Return域)對象吱七,用來表示return a + b
????????繼續(xù)打開ReturnStatement,里面是一個BinaryExpression(二項式)對象,用來表示a + b
????????繼續(xù)打開BinaryExpression鹤竭,它成了三部分踊餐,left,operator臀稚,right
????????????operator?即+
????????????left?里面裝的吝岭,是Identifier對象?a
????????????right?里面裝的,是Identifer對象?b
? ? ? ? 明哥偷了張圖: