1. 程式人生 > >瀏覽器解析JavaScript的原理

瀏覽器解析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。

    基礎步驟就是這,一步一步的來,就沒有什麼大問題。