2

¿Porque si declaro dos variables con el mismo nombre en mi código me da un error mientras que si hago una declaración dentro de un bucle no da error?

for(let i=0; i<5; i++){
  let variable = 9;
}

No se supone que en un bucle estoy redeclarando una variable que ya existia en la iteracion previa?

let variable = 9;
let variable = 10;

¿Alguien podría explicarme la diferencia entre declarar dos veces la misma variable y declarar una variable dentro de un bucle?

Según yo la variable ya existía previamente en la iteracion anterior y ahora se vuelve a declarar y no se, estoy confundido

BetaM
  • 30,571
  • 7
  • 32
  • 50
Juan Mata
  • 121
  • 2
  • 2
    Posible duplicado de [var, let, const... o nada en Javascript](https://es.stackoverflow.com/questions/106042/var-let-const-o-nada-en-javascript) – Nicolas Oñate May 24 '19 at 06:24
  • No realmente, estaba leyendo esa pregunta, y se refiere a que si declaramos dos variables con el mismo nombre solo se tendrá en cuenta la primera y las variables con let en un bloque solo son visibles dentro de ese bloque y mi pregunta en si es, porque es permitido que en un bucle se declare una variable si esa variable ya ha sido declarada en una iteracion previa, es decir el bucle pasa varias veces por esa sentencia y ese nombre ya existe, osea que seria igual a tener varias veces declarada esa variable pero no es asi y esa es mi duda – Juan Mata May 24 '19 at 06:28

1 Answers1

1

¿Alguien podría explicarme la diferencia entre declarar dos veces la misma variable y declarar una variable dentro de un bucle?

Las variables locales y constantes tienen que tener nombres univocos y al intentar declarar 2 veces la misma variable, JavaScript te levanta una excepciòn (el error que te da), visto que esta regla no esta siendo cumplida.

como podes ver :

for(i = 0; i < 5; i++) {
   if (i != 0)
     console.log(a + " antes de declarar")
   let a = i;
   console.log(a + " despues de declarar")
}

En el caso de declarar una variable local al interno de un bucle, esa misma variable existe desde su declaración hasta que se ejecute el ultimo fragmento de codigo al interno del loop. Osea la variable existe solo durante la primera iteraciòn.

Esto no ocurre cuando se utiliza var, la cual te permite declarar mas veces la misma variable y tratandose de una variable global, esta no deja de existir por mas que se termine la iteración, es decir que con esta declaración JS sobre escribe la variable :

for (i=0;i < 5; i++) {
   if (i != 0)
     console.log(a + " sigo existiendo");
   var a = i;
   console.log(a);
}

var a = 1;
console.log(a + " primera declaraciòn externa");
var a = 3;
console.log(a + " segunda declaraciòn externa");

explicaciòn final :

const sirve para declarar una variable constante, esto significa que en todo tu proyecto no podes volver a utilizar ese nombre como variable y la misma no puede cambiar valor. ejemplo :

const CONSTANTE = "soy una variable constante";

try {
  CONSTANTE = "cambio el valor"
}catch {
  console.log("la variable no puede cambiar su valor !")
}

console.log(CONSTANTE);

const CONSTANTE = "nadie se puede llamar como yo";


var CONSTANTE = "probamos";

let sirve para declarar variables locales, si la declaras por ejemplo en una función, quiere decir que en esa función no puede haber otra variable con ese nombre. y esta variable va a existir unicamente al interno de la misma función.

ejemplo :

function a() {
 let hola = "hola desde a";
 console.log(hola);
}

function b() {
 let hola = "hola desde b";
 console.log(hola);
}

function c() {
 let hola = "hola desde c";
 console.log(hola);
}

function d() {
 let hola = "hola desde d";
 console.log(hola)
}

a();
b();
c();
d();
try {
   console.log(hola);
}catch {
   console.log("no existe la variable 'hola'");
}

espero que te sea un poco mas claro el asunto !

exitos.

Federico
  • 1,471
  • 7
  • 23