views:

165

answers:

6

Possible Duplicate:
Javascript: is using 'var' to declare variables optional?

When creating variables in javascript is adding "var" before the variable name a must?

For example instead of

var message = "Hello World!"

can I use

message = "Hello World!"

?

I notice that scripts like Google Adsense don't use var

Example:

google_ad_width = 160;
google_ad_height = 600;
google_color_border = "000000";
google_color_bg = "ffffff";
+1  A: 

When adding Google AdSense to your page, you're linking a number of javascript files. The variables are defined in there.

http://pagead2.googlesyndication.com/pagead/show_ads.js should be one of the script references in your page.

Babak Naffas
+3  A: 

Without var a variable is defined as global.

MatTheCat
+12  A: 

Without the var you create a global, and globals are a fantastic way to have different functions overwriting each others variables (i.e. they make code a pain to maintain).

With the var, the scope of the variable is limited to the current function (and anything inside it — it is possible to nest functions).

Google Adsense uses globals because it splits scripts into two distinct parts (one local and one remote). A cleaner approach would be to call a function defined in the remote script and pass the parameters as arguments instead of having it pick them up from the global scope.

David Dorward
That totally makes sense!
V777
+1 Wish I knew this a few days ago when I was actually trying to create a global variable and all I got was undefined o.O
FreekOne
Also, referring to a variable that hasn't been declared will throw an error in ECMAScript 5 strict mode.
Tim Down
+3  A: 

From http://www.updrift.com/article/to-var-or-not-to-var-my-javascript

  1. For global variables, it doesn’t matter, but you may want to use it for consistency.
  2. Always try to use ‘var’ to declare variables in local functions. It makes sure you’re using a local copy of the variable instead of another variable of the same name in a different scope.

For example, the two similar functions here have very different effects:

var myvar = 0;
function affectsGlobalVar(i){
   myvar = i;
}
function doesNotAffectGlobalVar(i){
   var myvar = i;
}
Matthew Vines
+1  A: 

For the unenlightened like myself, JavaScript basically has two scopes for variables: global and local. Variables assigned outside of a function are global, and variables assigned inside of a function, using the var keyword, are local (not rocket surgery). However, if you leave the var keyword off, it assigns a global variable, regardless of where it’s declared.

From: http://opensoul.org/2008/9/4/the-importance-of-var-in-javascript

Gary Willoughby
Very basically speaking, that is correct. However, there can be nested local scopes. A var declared in a function inside another function can not be accessed by the parent function.
treeface
+2  A: 

Yes, you should always use var.

Not using var has two major drawbacks:

  • Accessing a variable within a function that is not defined within that function will cause the interpreter to look up the scope chain for a variable with that name until either it find one or it gets to the global object (accessible in browsers via window) where it will create a property. This global property is now available everywhere, potentially causing confusion and hard-to-detect bugs;
  • Accessing an undeclared variable will cause an error in ECMAScript 5 strict mode.

Also, not using var for global variable is not exactly the same as using var: when using var, the property it creates on the global object has the internal DontDelete attribute, which is not the case without var:

// Next line works in any ECMAScript environment. In browsers, you can
// just use the window object.
var globalObj = (function() { return this; })();

var x = 1;
delete globalObj.x;
alert(x); // Alerts 1, x could not be deleted

y = 2;
delete globalObj.y;
alert(y); // Error, y is undefined
Tim Down