js 之 預編譯篇

js 是一個解析行語言。做爲解析型語言;咱們要知道;是如何解析的。javascript

1:語言分析 ——>  2: 預編譯 ——> 3:解析執行java

1:語言分析:JS 會對所有的腳本代碼進行解析,經過jS引擎檢查你的代碼是否存在錯誤,若是有有錯誤就會拋出一個錯誤;否者語言分析完成。學會這個東西的做用是,咱們調試代碼時候;能夠幫助咱們找到錯誤。瀏覽器

    在瀏覽器控制檯輸出紅色的錯誤提示,就是語言分析完成的函數

 

2:預編譯 (請注意;看到文章的朋友;重點掌握的是:對函數的預編譯)調試

  • 理由:首先javascript是解釋型語言,天然就是編譯一行,執行一行。js運行過程分爲三步:一、語法分析 二、預編譯  三、解釋執行
  • 語法分析就是指js引擎去判斷檢查你的代碼是否存在語法錯誤
  • 預編譯:簡單理解就是在內存中開闢一些空間,存放一些變量與函數
  • 解析執行:就是執行咱們的JS 代碼
  • 預編譯是在何時開始的呢?

  • 總結
    • 預編譯(函數執行前)
    • 1. 建立AO對象(Active Object)
    • 2. 查找函數形參及函數內變量聲明,形參名及變量名做爲AO對象的屬性,值爲undefined
    • 3. 實參形參相統一,實參值賦給形參
    • 4. 查找函數聲明,函數名做爲AO對象的屬性,值爲函數引用
    • --------------
    • 預編譯(腳本代碼塊script執行前)
    • 1. 查找全局變量聲明(包括隱式全局變量聲明,省略var聲明),
    • 2:變量名做全局對象的屬性,值爲undefined 
    • 3. 查找函數聲明,函數名做爲全局對象的屬性,值爲函數引用
    • ---------
    • 預編譯階段發生變量聲明和函數聲明,沒有初始化行爲(賦值),匿名函數不參與預編譯 ,只有在解釋執行階段纔會進行變量初始化 。