執(zhí)行環(huán)境

2018-06-16 15:16 更新

當(dāng)控制器轉(zhuǎn)入 ECMA 腳本的可執(zhí)行代碼時,控制器會進入一個執(zhí)行環(huán)境。當(dāng)前活動的多個執(zhí)行環(huán)境在邏輯上形成一個棧結(jié)構(gòu)。該邏輯棧的最頂層的執(zhí)行環(huán)境稱為當(dāng)前運行的執(zhí)行環(huán)境。任何時候,當(dāng)控制器從當(dāng)前運行的執(zhí)行環(huán)境相關(guān)的可執(zhí)行代碼轉(zhuǎn)入與該執(zhí)行環(huán)境無關(guān)的可執(zhí)行代碼時,會創(chuàng)建一個新的執(zhí)行環(huán)境。新建的這個執(zhí)行環(huán)境會推入棧中,成為當(dāng)前運行的執(zhí)行環(huán)境。

 執(zhí)行環(huán)境包含所有用于追蹤與其相關(guān)的代碼的執(zhí)行進度的狀態(tài)。精確地說,每個執(zhí)行環(huán)境包含如表 19 列出的組件。

表19——執(zhí)行環(huán)境的狀態(tài)組件
組件作用目的
詞法環(huán)境指定一個詞法環(huán)境對象,用于解析該執(zhí)行環(huán)境內(nèi)的代碼創(chuàng)建的標識符引用。
變量環(huán)境指定一個詞法環(huán)境對象,其環(huán)境數(shù)據(jù)用于保存由該執(zhí)行環(huán)境內(nèi)的代碼通過 變量表達式 和 函數(shù)表達式 創(chuàng)建的綁定。
This綁定指定該執(zhí)行環(huán)境內(nèi)的 ECMA 腳本代碼中 this 關(guān)鍵字所關(guān)聯(lián)的值。

 其中執(zhí)行環(huán)境的詞法環(huán)境和變量環(huán)境組件始終為 詞法環(huán)境 對象。當(dāng)創(chuàng)建一個執(zhí)行環(huán)境時,其詞法環(huán)境組件和變量環(huán)境組件最初是同一個值。在該執(zhí)行環(huán)境相關(guān)聯(lián)的代碼的執(zhí)行過程中,變量環(huán)境組件永遠不變,而詞法環(huán)境組件有可能改變。

 在本標準中,通常情況下,只有正在運行的執(zhí)行環(huán)境(執(zhí)行環(huán)境棧里的最頂層對象)會被算法直接修改。因此當(dāng)遇到“詞法環(huán)境”,“變量環(huán)境”和“This 綁定”這三個術(shù)語時,指的是正在運行的執(zhí)行環(huán)境的對應(yīng)組件。

 執(zhí)行環(huán)境是一個純粹的標準機制,并不代表任何 ECMA 腳本實現(xiàn)的工件。在 ECMA 腳本程序中是不可能訪問到執(zhí)行環(huán)境的。

標識符解析

 標識符解析是指使用正在運行的執(zhí)行環(huán)境中的詞法環(huán)境,通過一個 標識符 獲得其對應(yīng)的綁定的過程。在 ECMA 腳本代碼執(zhí)行過程中,PrimaryExpression : Identifier 這一語法產(chǎn)生式將按以下算法進行解釋執(zhí)行:

  1. 令 env 為正在運行的執(zhí)行環(huán)境的 詞法環(huán)境 。
  2. 如果正在解釋執(zhí)行的語法產(chǎn)生式處在 嚴格模式下的代碼 中,則僅 strict 的值為 true,否則令 strict 的值為 false。
  3. 以 env,Identifier 和 strict 為參數(shù),調(diào)用 GetIdentifierReference 函數(shù),并返回調(diào)用的結(jié)果。

 解釋執(zhí)行一個標識符得到的結(jié)果必定是 引用 類型的對象,且其引用名屬性的值與 Identifier 字符串相等。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號