JavaScript上下文執行對象

在看Backbone源碼解析中看到“Events對象可以理解爲會被變成被調用的對象上下文”,由於對於js的對象上下文並不熟悉,便翻閱了多位前輩大神的博客,其中包括湯姆大叔的深入理解JavaScript系列(11):執行上下文(Execution Contexts)和360weboy 的深入理解Javascript之執行上下文(Execution Context);以下有大神們的理解解釋也有自己初步的理解,也當作是學習筆記進行記錄。

Javascript中代碼的運行環境分爲以下三種:
- 全局級別的代碼 - 這個是默認的代碼運行環境,一旦代碼被載入,引擎最先進入的就是這個環境。
- 函數級別的代碼 - 當執行一個函數時,運行函數體中的代碼。
- Eval的代碼 - 在Eval函數內運行的代碼。

上下文:是調用當前可執行代碼的對象的引用。

  1. 活動的執行上下文組在邏輯上組成一個堆棧。
  2. 堆棧底部永遠都是全局上下文,而頂部就是當前活動的執行上下文。
  3. 只存在一個全局的上下文,該上下文能被任何其他的上下文所訪問到。
  4. javascript的工作方式是單線程,只有唯一的一個事件在某一時刻被激活處理,其他的事件被放入隊列中,等待被處理。
  5. 函數的執行上下文的個數沒有限制。
  6. 每次某個函數被調用,就有個新的執行上下文被創建。

總體流程:

  1. 當js代碼文件被瀏覽器載入後,默認最先進入的是全局的執行上下文;
  2. 當在全部上下文中調用執行一個函數時,程序流就進入該被調用函數內,則該函數就創建了一個新的執行上下文,並且將其壓入到執行上下文堆棧的頂部
  3. 瀏覽器總是執行當前在堆棧頂部的上下文,一旦執行完畢,該上下文就會從堆棧頂部被彈出,然後進入它下一位的上下文執行代碼
  4. 這樣堆棧中的上下文就會被依次執行並且彈出堆棧,直到回到全局的上下文

執行上下文的建立過程:

  1. 建立階段(當調用一個函數的時候,在執行函數體內的具體代碼之前)
    ①建立arguments、參數、函數的聲明、變量的聲明(按照順序)
    ②建立作用域鏈
    ③確定this的值
  2. 代碼執行階段(變量賦值,函數引用,執行其他代碼)
發佈了44 篇原創文章 · 獲贊 28 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章