【知識點】JS預編譯與做用域鏈

js運行三部曲:

  1. 語法檢測(通篇掃描,查看是否有語法錯誤)
  2. 詞法分析(預編譯)
  3. 解釋執行

全局預編譯過程

  1. 建立GO(window)對象(Global Object -- 全局執行期上下文)
  2. 找變量的聲明,將形參和變量名做爲AO屬性名,值爲undefined
  3. 找函數聲明,值賦予函數體。
  4. 注:若是遇到同名的變量會覆蓋

函數預編譯過程(預編譯發生在函數執行以前)

  1. 建立AO對象(Activation Object -- 函數執行期上下文)
  2. 找形參和變量的聲明,將形參和變量名做爲AO屬性名,值爲undefined
  3. 將實參值和形參統一。
  4. 在函數體裏面找函數聲明,值賦予函數體。
  5. 注:若是遇到同名的變量會覆蓋

當函數執行前會建立AO對象,函數執行完成後會銷燬AO對象。

做用域鏈:每一個AO對象串聯起來的鏈,最後爲GO對象

相關文章
相關標籤/搜索