當前位置:才華齋>設計>網頁設計>

JavaScript函式的執行過程

網頁設計 閱讀(9.39K)

1. 每一個JavaScript函式都是Function物件的一個例項, 它有一個僅供JavaScript引擎存取的內部屬性[[Scope]]. 這個[[Scope]]儲存著一個作用域的集合, 這個集合就叫”作用域鏈”, 集合中儲存著”可變物件”VO或”活動物件”AO(AO比VO多this和arguments屬性).

JavaScript函式的執行過程

2. 當函式被建立後, 其父級作用域的作用域鏈中的所有可變物件會被加入到它的[[scope]]中(如果父作用域是全域性, 那麼當前函式的作用域鏈中就只會加入一個全域性物件).

3. 當函式被執行時, 函式的執行環境會被推入一個環境棧中:

4.此時進入函式的變數初始化階段, 此階段會確定函式內部: this值, 函式的引數, 函式的宣告, 變數的宣告, 以及arguments. 根據這些值組成當前函式的活動物件AO, 之後會將AO物件儲存到當前函式作用域鏈的.首位.

  注意: AO按如下順序填充:

1.函式引數(若有傳參, 會被賦值, 若未傳參, 初始化值為undefined) 優先順序第二

2.函式宣告(若發生命名衝突, 會覆蓋) 優先順序最高

3.變數宣告(初始化變數值為undefined, 若發生命名衝突, 會忽略) 優先順序第三

2.然後就到了函式的執行階段, 此階段當前函式中使用到的所有變數和函式宣告都會從當前函式的[[Scope]]作用域鏈中查詢, 根據作用域鏈中物件的位置首先會查詢當前函式的AO物件, 如果沒有再查詢上層物件, 最後找到全域性物件, 如果都沒有則會報錯(變數未定義).