瀏覽器解析JavaScript的原理
JavaScript的特點一般都知道的就是解釋執行,逐行執行,就是從上到下依次執行。
JavaScript的執行之前,其實還是有一些操作的,只是沒有表現出來
JavaScript的執行過程:
1、語法檢測 首先是大致檢視有沒有基本的語法錯誤。比如說中文、關鍵字錯誤等等
2、詞法分析(預編譯)
3、逐行執行
預編譯的過程
1、先全域性 直接是 script 標籤裡的程式碼,函式除外
預編譯時
1、先模擬一個GO(global object) = { };
2、分析變數宣告(var) 若有則:GO = {變數名1:undefined,變數名2:undefined,……};若遇到同名的就覆蓋
3、分析函式宣告(function) 若有則:GO = {變數名1:undefined,變數名2:undefined,……,函式名1:函式體1,函式名2:函式體2,……};若遇到同名的就覆蓋
4、逐行執行 有賦值就賦值到GO裡相應的屬性
2、再區域性 在逐行執行時 若遇到函式呼叫,該函式會生成自己的作用域AO(active object) = { }
1、模擬一個AO = { }
2、分析引數 若有則:AO = {形參 1: 實參1,形參 2: 實參2,…… }
3、分析變數宣告 若有則:AO = {形參 1: 實參1,形參 2: 實參2,…… 變數名1:undefined,變數名2:undefined,……};若遇到同名的就跳過
4、分析函式宣告 若有則:AO = {形參 1: 實參1,形參 2: 實參2,…… 變數名1:undefined,變數名2:undefined,……,函式名1:函式體1,函式名2:函式體2,……};若遇到同名的就覆蓋
5、逐行執行 有賦值就賦值到AO相應的屬性,若遇到AO裡沒有的要賦值的,就向上一級找,一直找到GO,若GO沒有,就新增到GO。
基礎步驟就是這,一步一步的來,就沒有什麼大問題。