1 回答

TA貢獻1856條經(jīng)驗 獲得超5個贊
究竟是什么導致了
window
對象的這種行為?
JavaScript 有兩種主要類型的環(huán)境記錄(“保存”名稱 -> 值關(guān)聯(lián)的構(gòu)造):聲明性記錄和對象記錄。
聲明性環(huán)境記錄以特定于實現(xiàn)的方式存儲這些關(guān)聯(lián)。這是最常見的環(huán)境記錄類型,例如在調(diào)用函數(shù)時創(chuàng)建。
正如名稱所示,對象環(huán)境記錄使用實際的 JavaScript 對象作為“后端”?。這意味著該環(huán)境中的每個條目都成為該“綁定對象”的屬性,反之亦然。
全局環(huán)境使用這樣的對象環(huán)境,并且該綁定對象可通過window
瀏覽器使用。
我們可以為任何顯式構(gòu)建的對象(如第一個片段中的對象)復制相同的行為嗎?
with
不推薦使用的語句可能仍然存在,并使用提供的對象作為綁定對象創(chuàng)建對象環(huán)境記錄。從規(guī)格來看:
該
with
語句將計算對象的對象環(huán)境記錄添加到正在運行的執(zhí)行上下文的詞法環(huán)境中。然后它使用這個增強的詞法環(huán)境執(zhí)行一條語句。最后,它恢復了原始的詞匯環(huán)境。
var obj? = {foo: 42};
with (obj) {
? console.log(foo);
}
添加回答
舉報