【知識點】JS預編譯與做用域鏈
js運行三部曲:
- 語法檢測(通篇掃描,查看是否有語法錯誤)
- 詞法分析(預編譯)
- 解釋執行
全局預編譯過程
- 建立GO(window)對象(Global Object -- 全局執行期上下文)
- 找變量的聲明,將形參和變量名做爲AO屬性名,值爲undefined
- 找函數聲明,值賦予函數體。
- 注:若是遇到同名的變量會覆蓋
函數預編譯過程(預編譯發生在函數執行以前)
- 建立AO對象(Activation Object -- 函數執行期上下文)
- 找形參和變量的聲明,將形參和變量名做爲AO屬性名,值爲undefined
- 將實參值和形參統一。
- 在函數體裏面找函數聲明,值賦予函數體。
- 注:若是遇到同名的變量會覆蓋
當函數執行前會建立AO對象,函數執行完成後會銷燬AO對象。
做用域鏈:每一個AO對象串聯起來的鏈,最後爲GO對象
歡迎關注本站公眾號,獲取更多信息