­

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

瀏覽器原理與實踐

重學前端