[英]What does the window object contain?
首先,簡要介紹讀者對詞匯環境的看法,以及它與全球環境的關系,以及全球環境與全球對象的關系。
詞匯環境包括:
詞法環境繼承在其包含的環境中聲明的變量定義,並在每次計算try語句的函數聲明,塊語句或catch子句時創建。 在定義它們的詞匯環境之外無法訪問變量定義。
以下示例:
var
聲明定義一個全局變量,初始化為一個函數表達式,它創建一個新的詞法環境, var
聲明,這次初始化為字符串值,和 var hello = function() {
var world = "fubar";
console.log(world); // "fubar";
}
console.log(world); // ReferenceError: world is not defined
全局環境是一個詞法環境,其外部環境引用為null,並且包含一個關聯的全局對象,其屬性提供一些全局環境的標識符綁定,特別是排除使用let
或const
聲明定義的變量,以及其他可能的排除。
var hello = "world";
console.log(hello, window.hello); // "world", "world"
let foo = "bar";
console.log(foo, window.foo) // "bar", undefined
現在,在上下文中回答您的問題:
我看到的列表包含什么,以及它是如何填充的?
您看到的列表包含全局對象的屬性,包括:
本答案中包含的信息應符合ECMAScript 2015語言規范 ,該規范還包含此處使用的大多數術語的定義,我強烈建議您在閱讀時輕松瀏覽該文檔。
如果您發現此答案與ECMAScript語言規范之間存在差異,請隨時編輯此答案以使其符合要求。
這些是窗口對象的所有功能。
這樣想吧。 所有函數都是對象的一部分。 運行代碼中的'this'返回運行該函數的對象上下文。它可能是該函數定義的對象,但是'this'可以在代碼中動態更改,因此更准確地說它是函數的對象上下文正在運行。
window是瀏覽器中的全局對象,因此當您不在作為窗口子對象一部分的函數內時,您處於窗口對象上下文中。
例如,
var o = { test: function(){ alert(this) } }
o.test();
將警告o對象,而不是窗口。
您可以直接調用位於相同上下文中的函數,這就是您可以在控制台中鍵入Infinity的原因,並返回Infinity,它是窗口的一部分。
JavaScript也會查找父對象(在本例中為窗口)到聲明的對象,因此在瀏覽器控制台中,這可以工作:
var o = { test: function(){ alert(Infinity) } }
o.test();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.