JS 總結之執行環境

🍓 運行環境

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

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

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

🍑 執行環境

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

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

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

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

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

整個執行過程能夠參考《JS 總結之閉包》中舉的例子。函數

🍒 執行環境棧

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

執行環境棧 = [globalContext]
複製代碼

如今寫個例子:spa

var a = 1

function d() {}

function b() {
  function c() {
    d()
  }
  c()
}
b()
複製代碼

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

執行環境棧 = [
  dContext
  cContext,
  bContext,
  globalContext
]
複製代碼

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

🚀 參考

相關文章
相關標籤/搜索