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規範:https://tc39.es/ecma262/#sec-type

瀏覽器原理與實踐

重學前端

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