1.編譯原理
1.分詞/詞法分析
這些代碼塊被稱為詞法單元(token)。例如,var a = 2;。這段程序通常會被分解成為下面這些詞法單元:var、a、=、2 、;
2.解析/語法分析
這個過程是將詞法單元流(數組)轉換成一個由元素逐級嵌套所組成的代表了程序語法結構的樹。這個樹被稱為“抽象語法樹”(Abstract Syntax Tree,AST)
<script> variabledeclaration identifier = a assignmentExpession numricliteral =2 </script>
3.代碼生成
將AST轉換為可執行代碼的過程稱被稱為代碼生成 。
3.編譯原理的重要角色
引擎
從頭到尾負責整個JavaScript程序的編譯及執行過程。
編譯器
引擎的好朋友之一,負責語法分析及代碼生成等臟活累活。
作用域
引擎的另一位好朋友,負責收集並維護由所有聲明的標識符(變量)組成的一系列查詢,並實施一套非常嚴格的規則,確定當前執行的代碼對這些標識符的訪問權限
4.RHS和LHS查詢
如果查找的目的是對變量進行賦值,那么就會使用LHS查詢;如果目的是獲取變量的值,就會使用RHS查詢
5.錯誤類型
ReferenceError同作用域判別失敗相關,而TypeError則代表作用域判別成功了,但是對結果的操作是非法或不合理的。