En primer lugar, generalmente es una mala práctica usar código fuera de las funciones. Por lo menos, envolver el código en funciones anónimas:
(function(){
// code
})();
En cuanto a lo var efecto tiene, que "declara" una variable:
var foo;
alert(foo); // undefined;
vs:
alert(foo); // error: foo is not defined
La razón para esto es que el código anterior es funcionalmente idéntico a:
alert(window.foo);
sin declarar la variable con var
, se obtiene un error de búsqueda, lo mismo que intentar acceder a la propiedad de cualquier objeto que no existe.
Tenga en cuenta que una de las singularidades de la var
es que todas las declaraciones son empujados a la parte superior de la secuencia de comandos, así que esto va a funcionar así:
alert(foo); // undefined
var foo;
También tendrá acceso a la variable en el window
objeto (aunque también puede tener esta estableciendo la variable sin var, por ejemplo, acaba de foo=42
):
var foo;
for(var key in window){
// one of these keys will be 'foo'
}
Esto "La razón para esto es que el código anterior es funcionalmente idéntico a:' alert (window.foo); '" está muy mal. Pruebe esto: http://jsfiddle.net/zeKhL/ –
@ c-smile: no está mal. jsfiddle ajusta el código en una función anónima de forma predeterminada. http://jsfiddle.net/cwolves/zeKhL/1/ –
@Chris: en muchos casos, no importa fuera de las funciones. El caso más simple donde lo hace es simplemente tener el código 'if (some_var) {' donde obtendrá un error "some_var no está definido" si la variable nunca se estableció O se declaró con 'var' –