都是本人理解屠尊,筆記大致概念,不詳細也并非完全正確耕拷,所以僅供參考讼昆。
DOM與BOM
JavaScript 規(guī)范來說分為是三部分
- ECMAScript:JS執(zhí)行標準
- DOM:文檔對象模型
- BOM:窗口對象模型
當瀏覽器加載文檔時,會以HTML節(jié)點生成DOM樹斑胜,而JS的DOM對象即DOM樹的調(diào)用API控淡,通過DOM對象可以對文檔節(jié)點進行增刪改等的作,所以 DOM 是為了操作文檔出現(xiàn)的接口止潘。
而 BOM 其實就是為了控制瀏覽器的行為而出現(xiàn)的接口掺炭,可以進行窗口的開啟、關(guān)閉凭戴,location 的前進后退涧狮,alert 彈窗等瀏覽器行為。
所以么夫,綜上所述:
DOM 是為了操作文檔出現(xiàn)的 API者冤,document 是其的一個對象。
BOM 是為了操作瀏覽器出現(xiàn)的 API档痪,window 是其的一個對象涉枫。
AST抽象語法樹
貼百度百科解釋:抽象語法樹(abstract syntax tree或者縮寫為AST),或者語法樹(syntax tree)腐螟,是源代碼的抽象語法結(jié)構(gòu)的樹狀表現(xiàn)形式愿汰,這里特指編程語言的源代碼。和抽象語法樹相對的是具體語法樹(concrete syntaxtree)乐纸,通常稱作分析樹(parse tree)衬廷。一般的,在源代碼的翻譯和編譯過程中汽绢,語法分析器創(chuàng)建出分析樹吗跋。一旦AST被創(chuàng)建出來,在后續(xù)的處理過程中,比如語義分析階段跌宛,會添加一些信息酗宋。
大致解釋下,就是說源碼是可以解析成一種語法樹秩冈,類似于DOM樹的結(jié)構(gòu)本缠,舉個例子隨便寫下:
function abc(a){
var b = 2;
var c = a + b;
return c;
}
如果通過抽象語法樹的解析轉(zhuǎn)換,那么就類似如下的結(jié)構(gòu)(我是瞎寫的入问,只是便于理解丹锹,實際中的對象結(jié)構(gòu)和這里不一樣):
{
type: 'function',
name: 'abc',
params: ['a'],
body: {
// 內(nèi)容
content: `
var b = 2;
var c = a + b;
return c;
`,
// 每一行
line: [
{
content: 'var b = 2;',
// 其他屬性 ...
},
{
content: 'var c = a + b;',
// 其他屬性 ...
},
// 其他行
]
}
}
解析之后為類似結(jié)構(gòu),這就是AST抽象語法樹芬失。
都知道 DOM 對象可以修改 DOM 樹楣黍,修改節(jié)點的內(nèi)容與樣式等,所以AST抽象語法書也可以對源碼進行修改棱烂、拼接租漂,所以AST抽象語法書也可以說是操作源碼的API。
這里僅簡單說描述說明颊糜,詳細參考此文哩治。