JS編譯過程,VO,AO

首先關(guān)于整個生命周期,最重要的是要了解它的編譯過程。

  1. 發(fā)現(xiàn)有代碼調(diào)用了一個函數(shù)
  2. 在執(zhí)行這個function之前,創(chuàng)建一個執(zhí)行上下文(execution context),也可以叫執(zhí)行環(huán)境。
  3. 進入創(chuàng)建階段(VO創(chuàng)建)
    a. 初始化作用域鏈(scope chain)
    b. 創(chuàng)建變量函數(shù)(variable object / VO)
    c. 創(chuàng)建參數(shù)對象(arguments object,傳進來的參數(shù)),檢查上下文,初始化其名字和值,以及建立引用對象的拷貝。
    d. 掃描上下文中的函數(shù)聲明
    e. 為每一個掃描到的函數(shù)聲明在VO中創(chuàng)建一個屬性,命名為函數(shù)的名字,指向了存儲空間中的對應(yīng)函數(shù)。
    f. 如果函數(shù)名稱已經(jīng)存在了,這個引用指針將被重寫為新的這一個。
    g. 掃描上下文中的變量聲明
    h. 為每一個掃描到的變量聲明在VO中創(chuàng)建一個屬性,命名為變量的名字,初始化值為undefined。
    i. 如果變量名在內(nèi)存中已經(jīng)存在了,就跳過。
    j. 決定上下文中this的指向。
  4. 執(zhí)行階段(VO => AO)
    a. 執(zhí)行/解釋上下文中的function,為變量賦值
    b. 代碼按行執(zhí)行

就我個人理解,他們的相應(yīng)概念和包含內(nèi)容如下。

scope :變量/函數(shù)起作用的區(qū)域
scope chain : 保證對執(zhí)行環(huán)境有權(quán)訪問的所有變量和函數(shù)的有序訪問。相當(dāng)于VO + [scope]
我們可以將作用域定義為一套規(guī)則,用來管理引擎如何在當(dāng)前作用域以及嵌套的子作用域中根據(jù)標(biāo)識符名稱進行變量查找,作用域鏈?zhǔn)沁@套規(guī)則的具體實現(xiàn)。

execution context = {VO, this, [scope]}

this : 函數(shù)/方法的擁有者

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容