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

2018-06-16 15:16 更新

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

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

表19——執(zhí)行環(huán)境的狀態(tài)組件
組件作用目的
詞法環(huán)境指定一個(gè)詞法環(huán)境對(duì)象,用于解析該執(zhí)行環(huán)境內(nèi)的代碼創(chuàng)建的標(biāo)識(shí)符引用。
變量環(huán)境指定一個(gè)詞法環(huán)境對(duì)象,其環(huán)境數(shù)據(jù)用于保存由該執(zhí)行環(huán)境內(nèi)的代碼通過(guò) 變量表達(dá)式 和 函數(shù)表達(dá)式 創(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)境 對(duì)象。當(dāng)創(chuàng)建一個(gè)執(zhí)行環(huán)境時(shí),其詞法環(huán)境組件和變量環(huán)境組件最初是同一個(gè)值。在該執(zhí)行環(huán)境相關(guān)聯(lián)的代碼的執(zhí)行過(guò)程中,變量環(huán)境組件永遠(yuǎn)不變,而詞法環(huán)境組件有可能改變。

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

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

標(biāo)識(shí)符解析

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

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

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)