你不知道的 Javascript(筆記一)
變數住在哪裡?換句話說,它們儲存在哪裡?最重要的是,程式需要時如何找到它們?
這些問題說明需要一套設計良好的規則來儲存變數,並且之後可以方便地找到這些變數。
這套規則被稱為作用域。
在傳統編譯語言的流程中,程式中的一段原始碼在執行之前會經歷三個步驟,統稱為“編譯”。
- 分詞/詞法分析(Tokenizing/Lexing)
這個過程會將由字元組成的字串分解成(對程式語言來說)有意義的程式碼塊,這些代
碼塊被稱為詞法單元(token)。例如,考慮程式 var a = 2; 。這段程式通常會被分解成
為下面這些詞法單元: var 、 a 、 = 、 2、; 。空格是否會被當作詞法單元,取決於空格在這門語言中是否具有意義。
- 解析/語法分析(Parsing)
這個過程是將詞法單元流(陣列)轉換成一個由元素逐級巢狀所組成的代表了程式語法
結構的樹。這個樹被稱為“抽象語法樹”(Abstract Syntax Tree,AST)。
var a = 2; 的抽象語法樹中可能會有一個叫作 VariableDeclaration 的頂級節點,接下
來是一個叫作 Identifier (它的值是 a )的子節點,以及一個叫作 AssignmentExpression 的子節點。 AssignmentExpression 節點有一個叫作 NumericLiteral (它的值是 2 )的子節點。
- 程式碼生成
將 AST 轉換為可執行程式碼的過程稱被稱為程式碼生成。這個過程與語言、目標平臺等息
息相關。拋開具體細節,簡單來說就是有某種方法可以將 var a = 2; 的 AST 轉化為一組機器指令,用來建立一個叫作 a 的變數(包括分配記憶體等),並將一個值儲存在 a 中。
對於 JavaScript 來說,大部分情況下編譯發生在程式碼執行前的幾微秒(甚至更短!)的時間內。簡單地說,任何 JavaScript 程式碼片段在執行前都要進行編譯(通常就在執行前)。因此,JavaScript 編譯器首先會對 var a = 2; 這段程式進行編譯,然後做好執行它的準備,並且通常馬上就會執行它。
相關文章
- 你不知道JavaScript上卷 筆記(一)JavaScript筆記
- 《你不知道的JavaScript》讀書筆記(一)JavaScript筆記
- 讀書筆記 – 你不知道的 JavaScript(上)筆記JavaScript
- 你不知道的JavaScript(上) - 閱讀筆記JavaScript筆記
- 你不知道的JavaScript(中) - 閱讀筆記JavaScript筆記
- 《你不知道的JavaScript》 (下) 讀書筆記JavaScript筆記
- 《你不知道的JavaScript》 (上) 讀書筆記JavaScript筆記
- 《你不知道的JavaScript》 (中) 讀書筆記JavaScript筆記
- 你不知道的Javascript(上卷)-作用域筆記JavaScript筆記
- 讀書筆記 - 你不知道的 JavaScript(上)筆記JavaScript
- 讀書筆記-你不知道的JavaScript(上)筆記JavaScript
- 你不知道的JavaScript讀書筆記-1JavaScript筆記
- 《你不知道的 JavaScript》全卷讀書筆記JavaScript筆記
- 【閱文筆記】提升【你不知道的JavaScript(上)】筆記JavaScript
- 你不知道的JavaScript(一)JavaScript
- 你不知道的JS 筆記JS筆記
- 《你不知道的JS上》筆記JS筆記
- 你不知道的JavaScriptJavaScript
- 你不知道的javascript,你不知道的奧祕JavaScript
- 全方位徹底讀懂<你不知道的JavaScript(上)>--一篇六萬多字的讀書筆記JavaScript筆記
- JavaScript之你不知道的thisJavaScript
- 你不知道的JavaScript(二)JavaScript
- 你所不知道的JavaScript 二JavaScript
- 你不知道的JavaScript-原型JavaScript原型
- 你不知道的JavaScript-提升JavaScript
- 你所不知道的JavaScript(三)JavaScript
- 【HTML+CSS+JavaScript】網頁實戰開發筆記之一——HTML的頭部資訊裡你不知道的事HTMLCSSJavaScript網頁筆記
- 你不知道的javascript上卷小結JavaScript
- 你不知道的javascript之繼承JavaScript繼承
- 精讀《你不知道的 javascript(上卷)》JavaScript
- 你不知道的JavaScript-this繫結JavaScript
- 你不知道的JavaScript 同步非同步JavaScript非同步
- 你所不知道的JavaScript陣列JavaScript陣列
- 你不知道的Javascript:有趣的setTimeoutJavaScript
- 你不知道的JavaScript·第一部分JavaScript
- 你可能不知道的一些JavaScript 奇技淫巧JavaScript
- 提升----你所不知道的JavaScript系列(3)JavaScript
- 你不知道的javascript上卷總結(2)JavaScript