簡體   English   中英

窗口對象包含什么?

[英]What does the window object contain?

我正在全局范圍內探索this關鍵字,並發現在this上下文中這是指窗口。

我的價值登錄this控制台,看到下面的圖片中顯示了巨大的列表。

我看到的列表包含什么,以及它是如何填充的?

首先,簡要介紹讀者對詞匯環境的看法,以及它與全球環境的關系,以及全球環境與全球對象的關系。


詞匯環境包括:

  • 環境記錄,用於存儲在環境范圍內創建的標識符綁定,
  • 對外部環境的參考,和
  • 對其中包含的任何環境的引用。

詞法環境繼承在其包含的環境中聲明的變量定義,並在每次計算try語句的函數聲明,塊語句或catch子句時創建。 在定義它們的詞匯環境之外無法訪問變量定義。

以下示例:

  • 使用var聲明定義一個全局變量,初始化為一個函數表達式,它創建一個新的詞法環境,
  • 在新環境中定義一個變量,再次使用var聲明,這次初始化為字符串值,和
  • 演示了變量在其定義的環境之外是不可訪問的:
var hello = function() {
    var world = "fubar";
    console.log(world); // "fubar";
}

console.log(world); // ReferenceError: world is not defined

全局環境是一個詞法環境,其外部環境引用為null,並且包含一個關聯的全局對象,其屬性提供一些全局環境的標識符綁定,特別是排除使用letconst聲明定義的變量,以及其他可能的排除。

var hello = "world";
console.log(hello, window.hello); // "world", "world"

let foo = "bar";
console.log(foo, window.foo) // "bar", undefined

現在,在上下文中回答您的問題:

我看到的列表包含什么,以及它是如何填充的?

您看到的列表包含全局對象的屬性,包括:

  • 瀏覽器提供的預先填充的標識符綁定 - 其中一些是標准的,另一些是特定於JavaScript引擎或瀏覽器實現的 -
  • 由當前頁面上運行的腳本設置的全局變量,或
  • 您可能已安裝的瀏覽器擴展設置的全局變量。

本答案中包含的信息應符合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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM