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?
Is the window
object the ultimate global object and does that have an object called window
that refers back to itself?
Yes, and yes. This, for instance, returns true
:
window.window.window.window.window === window.window;
You can, if you are interested, get a list of all the properties of the window
object (and hence all global variables) with Object.keys
:
console.log(Object.keys(window));
Note, however, that if you are spending too much time thinking about global variables, there is probably a problem with the architecture of your code.
Yes, the window
object is
The Global Object(§15.1 ES5 Specification)
The unique global object is created before control enters any
execution context.
Unless otherwise specified, the standard built-in properties of the
global object have attributes {[[Writable]]: true, [[Enumerable]]:
false, [[Configurable]]: true}.
The global object does not have a [[Construct]] internal property; it
is not possible to use the global object as a constructor with the new
operator.
The global object does not have a [[Call]] internal property; it is
not possible to invoke the global object as a function.
The values of the [[Prototype]] and [[Class]] internal properties of
the global object are implementation-dependent.
In addition to the properties defined in this specification the global
object may have additional host defined properties. This may include a
property whose value is the global object itself; for example, in the
HTML document object model the window property of the global object is
the global object itself.
All global variables become properties of the window object.
>>> window.somevar = 1;
1
>>> somevar
1
And all of the core JavaScript functions are methods of the window object.
Yes, Window
is the root element of the DOM (Document Object Model) object hierarchy.