Often I see a global object defined in javascript code to act as a namespace.
var MyNS = {a: function() {}, ... };
But sometimes, I see people leave off the “var” keyword like
MyNS = {a: function() {}, ...};
I believe in web browsers if you do not define a variable with var, it is put in the window object, which acts as a global namespace. Since it saves a few bytes of text by not using “var” is there a reason to use the keyword for this specific purpose ?
I wouldn’t recommend you to avoid the
varkeyword, even if you are on Global Code.The two ways seem similar but actually they are not the same, the first is a Variable Declaration, the Variable Object on global code, is the Global object itself, that’s why global variables are accessible as properties of the global object (
window.MyNS).The second one is an undeclared assignment, it creates a property on the global object if the identifier is not found in the scope chain.
A real reason to avoid it is that in the new standard of the language, ECMAScript 5th Edition, under Strict Mode, an assignment to an undeclared identifier will throw a
ReferenceErrorbreaking your code.There is also another subtle difference between your two examples, the Variable Instantiation creates the property on the global object that is non-deleteable:
While the undeclared assignment not:
Recommended article: