JavaScript 中,有三種代碼運行環境:html
爲了表示不一樣的運行環境,JavaScript 中有一個執行環境的概念。git
執行環境都有三個重要的屬性:github
這三個屬性跟代碼運行的行爲有很重要的關係,在以前的文章中都有詳細分析。具體能夠查看《JS 總結之函數、做用域鏈》、《JS 總結之變量對象》和《JS 總結之關於 this 應該知道的幾個點》。瀏覽器
當一段 JavaScript 代碼執行的時候,JavaScript 解釋器會建立執行環境,其實這裏會有兩個階段:閉包
整個執行過程能夠參考《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