I ve stumbled upon a JavaScript variable behavior I could not explain.
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/var https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/var
The scope of a variable declared with var is the enclosing function or, for variables declared outside a function, the global scope (which is bound to the global object).
Also it is known that global variables become properties of the global object - window in the browser environments and global in node.js This means if a variable is declared with a var keyword inside a function it becomes local and does not get into the global object.
This example proves it:
(function(){ var t = 1; console.log(t in window, t); // outputs: false 1 }());
http://jsfiddle.net/WmH77/ http://jsfiddle.net/WmH77/
So far so good. However if variable is not initialized it does become a property of the window object despite the fact it is in the function scope.
(function(){ var t; console.log(t in window, t); // outputs: true undefined }());
http://jsfiddle.net/WmH77/1/ http://jsfiddle.net/WmH77/1/
Why does it happen ? Where can I learn the details of this behavior ? Regular tutorials don t seem to cover this.
Thanks in advance.
[EDIT]: https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/in https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/in So in the example one it was equal to
1 in window
which was false
and in the example two it was
undefined in window
which was true.