窗口对象包含什么?

LOT*_*SMS 2 javascript

我正在this全局范围内探索关键字,并发现在this该上下文中指的是窗口.

我将值记录this到控制台,并看到下图中显示的巨大列表.

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

小智 9

首先,简要介绍读者对词汇环境的看法,以及它与全球环境的关系,以及全球环境与全球对象的关系.


一个词法环境包括:

  • 环境记录,用于存储在环境范围内创建的标识符绑定,
  • 对外部环境的参考,和
  • 对其中包含的任何环境的引用.

词法环境继承在其包含的环境中声明的变量定义,并在每次计算try语句的函数声明,块语句或catch子句时创建.在定义它们的词汇环境之外无法访问变量定义.

以下示例:

  • 使用var声明定义一个全局变量,初始化为一个函数表达式,它创建一个新的词法环境,
  • 在新环境中定义一个变量,再次使用一个var声明,这次初始化为一个字符串值,和
  • 演示了变量在其定义的环境之外是不可访问的:
var hello = function() {
    var world = "fubar";
    console.log(world); // "fubar";
}

console.log(world); // ReferenceError: world is not defined
Run Code Online (Sandbox Code Playgroud)

全球环境是一个词法环境的外环境引用为空,并且其包括相关联的全局对象,其属性提供一些对全球环境的识别符绑定的,具体地但不包括通过定义的变量letconst声明,以及其他可能的排除.

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

let foo = "bar";
console.log(foo, window.foo) // "bar", undefined
Run Code Online (Sandbox Code Playgroud)

现在,在上下文中回答您的问题:

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

您看到的列表包含全局对象的属性,包括:

  • 浏览器提供的预先填充的标识符绑定 - 其中一些是标准的,另一些是特定于JavaScript引擎或浏览器实现的 -
  • 由当前页面上运行的脚本设置的全局变量,或
  • 您可能已安装的浏览器扩展设置的全局变量.

本答案中包含的信息应符合ECMAScript 2015语言规范,该规范还包含此处使用的大多数术语的定义,我强烈建议您在阅读时轻松浏览该文档.

如果您发现此答案与ECMAScript语言规范之间存在差异,请随时编辑此答案以使其符合要求.