Javascript 窗口对象包含什么?
我在全局范围内探索Javascript 窗口对象包含什么?,javascript,Javascript,我在全局范围内探索this关键字,发现该上下文中的this指的是窗口 我将this的值记录到控制台中,看到下图中显示了一个巨大的列表 我看到的列表包含了什么,它是如何填充的 这些都是作为窗口对象一部分的函数 这样想吧。所有函数都是对象的一部分。”运行代码中的“in”返回函数运行的对象上下文。它可能是定义函数的对象,但“this”可以在代码中动态更改,因此更准确地说,它是函数运行所在的对象上下文 窗口是浏览器中的全局对象,因此当您不在作为窗口子对象一部分的函数内时,您处于窗口对象上下文中 比如说,
this
关键字,发现该上下文中的this
指的是窗口
我将this
的值记录到控制台中,看到下图中显示了一个巨大的列表
我看到的列表包含了什么,它是如何填充的
这些都是作为窗口对象一部分的函数 这样想吧。所有函数都是对象的一部分。”运行代码中的“in”返回函数运行的对象上下文。它可能是定义函数的对象,但“this”可以在代码中动态更改,因此更准确地说,它是函数运行所在的对象上下文 窗口是浏览器中的全局对象,因此当您不在作为窗口子对象一部分的函数内时,您处于窗口对象上下文中 比如说,
var o = { test: function(){ alert(this) } }
o.test();
将警告o对象,而不是窗口
您可以直接调用同一上下文中的函数,这就是为什么您可以在控制台中键入Infinity,它返回Infinity,这是窗口的一部分
JavaScript还将查找声明对象的父对象(在本例中为窗口),因此在浏览器控制台中,这起作用:
var o = { test: function(){ alert(Infinity) } }
o.test();
首先,向读者简要介绍什么是词汇环境,以及词汇环境与全局环境的关系,以及全局环境与全局对象的关系
词汇环境包括:
- 环境记录,存储在环境范围内创建的标识符绑定
- 对外部环境的引用,以及
- 对中包含的任何环境的引用李>
- 使用
声明定义全局变量,初始化为函数表达式,创建新的词汇环境var
- 在新环境中定义变量,再次使用
声明,这次初始化为字符串值,然后var
- 演示在定义变量的环境之外无法访问该变量:
全局环境是一个词法环境,其外部环境引用为空,包括一个关联的全局对象,其属性提供了一些全局环境的标识符绑定,特别排除使用
let
或const
声明定义的变量,以及其他可能的排除
var hello = "world";
console.log(hello, window.hello); // "world", "world"
let foo = "bar";
console.log(foo, window.foo) // "bar", undefined
现在,根据上下文回答您的问题: 我看到的列表包含了什么,它是如何填充的 您看到的列表包含全局对象的属性,其中包括:
- 浏览器提供的预填充标识符绑定-其中一些是标准的,其他的是特定于JavaScript引擎或浏览器实现的-
- 由当前页面上运行的脚本设置的全局变量,或
- 由您可能已安装的浏览器扩展设置的全局变量
此答案中包含的信息应符合,其中还包含此处使用的大多数术语的定义,我强烈建议您随时浏览该文档,以便轻松阅读
如果您发现此答案与ECMAScript语言规范之间存在差异,请随意编辑此答案以符合要求。TinyGiant的回答表明,此问题的格式不太宽泛。
var hello = "world";
console.log(hello, window.hello); // "world", "world"
let foo = "bar";
console.log(foo, window.foo) // "bar", undefined