1

Estoy aprendiendo JavaScript y me olvidé de poner var a una variable, pero al momento de ejecutar todo funcionó.

¿Es lo mismo declarar con var o sin var?

¿Qué problemas me podría traer a futuro si no las declaro con var?

var primerNombre, edad, sexo;

primer = 'Juan';
edad = 20;
sexo = 'M';

console.log('El nombre es: '+ primer + "y tengo " + edad );
ordago
  • 4,509
  • 12
  • 26
Ismael Ayala
  • 125
  • 1
  • 11
  • Declarar con var es caso lo mismo que declarar sin var, sin embargo se aconseja como buena practica poner var. – Riven Jun 22 '20 at 08:29
  • No es una buena práctica, hasta por qué visualmente al ver var se entiende que es una variable y eso facilita la lectura y entendimiento del código, ahora a partir del ECMAScript6 se incorporan nuevos tipos de variables como let y const, te aconsejo que las uses ya que verás muchos códigos usandolas. – junner13 Jun 22 '20 at 08:38
  • 1
    `let` y `const` no son "tipos de variables". Son palabras reservadas para la declaración de éstas, @junner13. – VRoxa Jun 22 '20 at 11:53
  • ¿Responde esto a tu pregunta? [var, let, const... o nada en Javascript](https://es.stackoverflow.com/questions/106042/var-let-const-o-nada-en-javascript) – BetaM Jun 22 '20 at 13:14
  • @junner13 si, las conozco, de hecho deje de usar `var` hace mucho y estoy deacuerdo contigo, pero me referia a la comparacion entre usar `var` y no usar nada, estaba dejando por fuera los otros conceptos para depronto no confundir al OP. – Riven Jun 22 '20 at 22:58

1 Answers1

4

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:

ordago
  • 4,509
  • 12
  • 26