JS 總結之執行環境

圖片描述

🍓 運行環境

JavaScript 中,有三種代碼運行環境:

  1. Global 環境
  2. Function 環境
  3. Eval 環境

爲了表示不同的運行環境,JavaScript 中有一個執行環境的概念。

🍑 執行環境

執行環境都有三個重要的屬性:

  • 變量對象
  • 作用域鏈
  • this

這三個屬性跟代碼運行的行爲有很重要的關係,在之前的文章中都有詳細分析。具體可以查看《JS 總結之函數、作用域鏈》《JS 總結之變量對象》《JS 總結之關於 this 應該知道的幾個點》

當一段 JavaScript 代碼執行的時候,JavaScript 解釋器會創建執行環境,其實這裏會有兩個階段:

  1. 創建階段(當函數被調用,但是開始執行函數內部代碼之前)
  • 創建 Scope chain
  • 創建 VO / AO(variables, functions and arguments)
  • 設置 this 的值
  1. 激活/代碼執行階段
  • 設置變量的值、函數的引用,然後解釋/執行代碼

整個執行過程可以參考《JS 總結之閉包》中舉的例子。

🍒 執行環境棧

當 JavaScript 代碼執行的時候,會進入不同的執行環境,這些執行環境會構成一個執行環境棧。在開始解析代碼的時候,會將全局執行環境 globalContext 壓入執行環境棧中:

執行環境棧 = [globalContext]

現在寫個例子:

var a = 1

function d() {}

function b() {
  function c() {
    d()
  }
  c()
}
b()

那麼對應的執行環境棧爲:

執行環境棧 = [
  dContext
  cContext,
  bContext,
  globalContext
]

當每個執行環境執行完後,執行環境棧會將它往外丟,最後只剩下 globalContext。globalContext 直到應用程序退出(如關閉網頁或瀏覽器)時纔會摧毀。。

🚀 參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章