JS的執行上下文
定義
執行上下文時是程式碼執行時的環境,JS程式碼在運行前進行編譯,那麼會生成兩部分,一部分是可執行的程式碼,而另一部分則是執行上下文。
發展
執行上下文所包含的內容是在不斷的變化的。它主要分為了三個不同的階段。分別是ES3階段,ES5階段和ES9階段
ES3階段
- variable object:變數對象,用於存儲變數的對象。
- scope:作用域,也常常被叫做作用域鏈。
- this
ES5階段
- variable environment:變數環境, 當聲明變數時使用。(此環境還包含了一個外部引用,用來指向外部的執行上下文,我們把這個外部引用稱為 outer(外部環境))
- lexical environment:詞法環境, 當獲取變數時使用。
- this
ES9階段
正常情況
正常情況會有如下四種
- variable environment:變數環境,當聲明變數時使用。
- lexical environment:詞法環境,當獲取變數或者 this 值時使用。
- code evaluation state:用於恢復程式碼執行位置。
- Realm:使用的基礎庫和內置對象實例。
:this 值被歸入 lexical environment
特定情況
在特定的情況下又會有如下三種
- Function:執行的任務是函數時使用,表示正在被執行的函數。
- ScriptOrModule:執行的任務是腳本或者模組時使用,表示正在被執行的程式碼。
- Generator:僅生成器上下文有這個屬性,表示當前生成器
參考
TC39規範://tc39.es/ecma262/#sec-type
瀏覽器原理與實踐
重學前端