Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Are global variables just properties on the `window` object?

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?

like image 397
cantdutchthis Avatar asked Nov 08 '13 09:11

cantdutchthis


People also ask

Is the window object the global object?

The global object in JavaScript is an always defined object that provides variables and functions, and is available anywhere. In a web browser, the global object is the window object, while it is named global in Node. js. The global object can be accessed using the this operator in the global scope.

Where do global variables declare?

The declaration of a global variable occurs only outside the blocks or functions.

Are global variables declared outside of main?

A global variable is declared outside any functions or tasks, and therefore typically appears at the very top of a program.


2 Answers

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.

like image 106
lonesomeday Avatar answered Nov 16 '22 03:11

lonesomeday


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.

like image 35
Moritz Roessler Avatar answered Nov 16 '22 01:11

Moritz Roessler