每当我在浏览器上看到一个网站时,就会运行一个javascript实例。我可以在控制台中声明一个全局变量(DevTools);
var a = 1234567890;
此变量已在全局范围内声明,以便我可以像这样获取变量的值;
> a
1234567890
但是,我也可以这样做;
> window.a
1234567890
我是否正确理解window
对象是包含浏览器中网站实例中所有全局变量的对象?如果是这样,窗口对象属于什么范围?这让我有点困惑;
> 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:, ...}
window
对象是否是最终的全局对象,是否有一个名为window
的对象引用回自身?
答案 0 :(得分:13)
window
对象是最终的全局对象吗?是否有一个名为window
的对象引用回自身?
是的,是的。例如,这会返回true
:
window.window.window.window.window === window.window;
如果您有兴趣,可以使用window
获取Object.keys
对象(以及所有全局变量)的所有属性的列表:
console.log(Object.keys(window));
但请注意,如果您花费太多时间考虑全局变量,则代码体系结构可能存在问题。
答案 1 :(得分:4)
是的,window
对象是
在控件进入任何对象之前创建唯一的全局对象 执行上下文。
除非另有说明,否则标准的内置属性 全局对象具有属性{[[Writable]]:true,[[Enumerable]]: false,[[Configurable]]:true}。
全局对象没有[[Construct]]内部属性;它 无法将全局对象用作new的构造函数 操作
全局对象没有[[Call]]内部属性;它是 无法将全局对象作为函数调用。
[[Prototype]]和[[Class]]内部属性的值 全局对象依赖于实现。
除了本规范中定义的属性全局 对象可能具有其他主机定义的属性。 这可能包括a 属性,其值是全局对象本身; 例如,在 HTML文档对象模型全局对象的窗口属性是 全局对象本身。
答案 2 :(得分:1)
所有全局变量都成为窗口对象的属性。
>>> window.somevar = 1;
1
>>> somevar
1
所有核心JavaScript函数都是窗口对象的方法。
答案 3 :(得分:-1)
是的,Window
是DOM(文档对象模型)对象层次结构的根元素。