Sí que es un problema, porque si no pones var
el motor de JavaScript va a intentar buscar la variable en un contexto superior de forma recursiva. Esto es, primero busca en el ámbito local, si no se encuentra, lo intenta en su contexto inmediatamente superior, y así hasta que llegue al contexto global. Si no se ha encontrado en ningún contexto, esa variable en se crea automáticamente.
El problema es si esa variable sí que se encuentra en uno de esos contexto superior que se han ido comprobando:
// VARIABLES GLOBALES
var primer = 'Ana';
var edad = 30;
var sexo = 'F';
function funcionConVar() {
// VARIABLES LOCALES (TIENEN VAR)
var primer = 'Juan';
var edad = 20;
var sexo = 'M';
console.log('(LOCAL) El nombre es: '+ primer + " y tengo " + edad );
}
function funcionSinVar() {
// NO SE INDICA VAR, HAY QUE BUSCARLAS PRIMERO EN CONTEXTOS SUPERIORES
primer = 'Juan';
edad = 20;
sexo = 'M';
console.log('(LOCAL) El nombre es: '+ primer + " y tengo " + edad );
}
console.log('(GLOBAL) El nombre es: '+ primer + " y tengo " + edad );
funcionConVar();
console.log('(GLOBAL) El nombre es: '+ primer + " y tengo " + edad );
funcionSinVar();
console.log('(GLOBAL) El nombre es: '+ primer + " y tengo " + edad );
En este caso tenemos tres variables que están en un contexto superior (Ana 30 F) a las dos funciones funcionConVar
y funcionSinVar
.
Si ejecutas la funcionConVar
, las variables primer
, edad
y sexo
son locales a esa función, es decir son copias nuevas y lo que hagas con ellas no afectan a las del contexto superior. Es decir que si le pones Juan 20 M, el usuario Ana 30 F no se ve modificado.
Sin embargo, si ejecutas la funcionSinVar
, al no tener var
, se intenta buscar variables con el mismo nombre en contextos superiores y sí que se se encuentra a Ana 30 F. Por lo que ahora esas variables no son locales y si las modificas con Juan 20 M, modificas indirectamente a Ana 30 F.
Si ejecutas el código que te he puesto puedes ver que Ana 30 F queda modificado indirectamente.
Se debe intentar poner var
, const
o let
a las variables locales para evitar este tipo de comportamientos dependientes del contexto superior.
Con var
lo que consigues es que se use la variable local con precedencia en caso de que ya exista esa variable en otro contexto superior.
Más información: