8

Whenever I see a website on the browser an instance of javascript is running. And I can declare a global variable in the console (DevTools);

var a = 1234567890; 

This variable has been declared in global scope such that I can get the value of the variable like so;

> a 
1234567890

However, I can also do this;

> window.a 
1234567890 

Am I understanding it correctly that the window object is the object that contains all the global variables within the website instance on the browser? If so to what scope does the window object belong? This is confusing me a little bit;

> window 
Window {top: Window, window: Window, location: Location, external:, ...}  
> window.window 
Window {top: Window, window: Window, location: Location, external:, ...}  
> window.window.window 
Window {top: Window, window: Window, location: Location, external:, ...}  

Is the window object the ultimate global object and does that have an object called window that refers back to itself?

4

3 回答 3

15

对象是window最终的全局对象吗?它是否有一个称为window引用自身的对象?

是的,是的。例如,这会返回true

window.window.window.window.window === window.window;

如果您有兴趣,您可以使用以下命令获取window对象的所有属性(以及所有全局变量)的列表Object.keys

console.log(Object.keys(window));

但是请注意,如果您花太多时间考虑全局变量,则代码的体系结构可能存在问题。

于 2013-11-08T09:46:17.140 回答
4

是的,window对象是

全局对象(§15.1 ES5 规范)

在控制进入任何执行上下文之前创建唯一的全局对象。

除非另有说明,否则全局对象的标准内置属性具有属性 {[[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true}。

全局对象没有 [[Construct]] 内部属性;不能将全局对象用作带有 new 运算符的构造函数。

全局对象没有 [[Call]] 内部属性;不能将全局对象作为函数调用。

全局对象的 [[Prototype]] 和 [[Class]] 内部属性的值是依赖于实现的。

除了本规范中定义的属性之外,全局对象可能还有其他主机定义的属性。这可能包括一个属性,其值为全局对象本身;例如,在 HTML 文档对象模型中,全局对象的window 属性就是全局对象本身。

于 2013-11-08T09:47:23.353 回答
1

所有全局变量都成为窗口对象的属性。

>>> window.somevar = 1;
1
>>> somevar
1

所有的核心 JavaScript 函数都是window 对象的方法。

于 2013-11-08T09:47:08.300 回答