答案 0 :(得分:9)
首先,简要介绍读者对词汇环境的看法,以及它与全球环境的关系,以及全球环境与全球对象的关系。
词汇环境包括:
词法环境继承在其包含的环境中声明的变量定义,并在每次计算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 Language Specification,其中还包含此处使用的大多数术语的定义,我强烈建议您在任何时候浏览该文档一些轻读的心情。
如果您发现此答案与ECMAScript语言规范之间存在差异,请随时编辑此答案以符合。
答案 1 :(得分:-2)
这些是窗口对象中的所有函数。
这样想。所有函数都是对象的一部分。 '这'在运行代码中返回运行该函数的对象上下文。可能是该函数所定义的对象,但是'这个'可以在代码中动态更改,因此更准确地说它是运行函数的对象上下文。
window是浏览器中的全局对象,因此当您不在作为窗口子对象一部分的函数内时,您处于窗口对象上下文中。
例如,
var o = { test: function(){ alert(this) } }
o.test();
会提醒o对象,而不是窗口。
您可以直接调用位于相同上下文中的函数,这就是您可以在控制台中键入Infinity的原因,并返回Infinity,它是窗口的一部分。
JavaScript也会查找父对象(本例中为窗口)到声明的对象,因此在浏览器控制台中,这可以工作:
var o = { test: function(){ alert(Infinity) } }
o.test();